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顺便说一下)。

问候。

vCard 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时查看了示例,因此有可能我错过了一些边缘情况