vCard 4.0正则表达式
本文关键字:正则表达式 vCard | 更新日期: 2023-09-27 18:15:24
前段时间,我创建了一个程序来处理vCard文件。这几乎可以通过以下命令完美地完成:
(?<FIELD>[^'s:;]+)(;(?<PARAM>[^:]+))*:(?<CONTENT>.*(?>'r'n[ 't].*)*)$
然而,这不适用于新的(2011年8月)vCard 4.0标准。问题是vCard 4.0文件使用以下布局:
FIELD(:)(;([PARAMETER]="[CONTENT],[MORE CONTENT]"(;))[DATATYPE(:)]:)CONTENT[newline]
。
ADR;type="home,work":(address)
如您所见,我想捕获整个参数,包括type="…"的内容。
所以我的问题是:我的代码可以修改吗?或者我必须写两个进程(一个用于旧类型,一个用于新4.0版本;理想情况下,我希望两者都支持),如果是,如何支持?(我正在使用c#和。net 4.0顺便说一下)。
问候。
试试下面的正则表达式:
(?<FIELD>[^'s:;]+)(;(?<PARAM>[^=:;]+)='"?(?<VALUE>[^:;]+)'"?)*:(?<CONTENT>[^;]*;?)*
该查询似乎可以处理这里提供的vCard 3.0示例:
ADR;TYPE=WORK:;;100 Waters Edge;Baytown;LA;30314;United States of America
ADR;TYPE=HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America
和4.0的例子:
ADR;TYPE=work;LABEL="42 Plantation St.'nBaytown, LA 30314'nUnited States of America"
:;;42 Plantation St.;Baytown;LA;30314;United States of America
它也匹配vCard 4.0规范中的这个例子:
ADR;GEO="geo:12.3457,78.910";LABEL="Mr. John Q. Public, Esq.'n
Mail Drop: TNE QB'n123 Main Street'nAny Town, CA 91921-1234'n
U.S.A.":;;123 Main Street;Any Town;CA;91921-1234;U.S.A.
我的免责声明是,我在vCard方面没有任何专门知识,我只是浏览了一部分规范,并在使用RegExr时查看了示例,因此有可能我错过了一些边缘情况