加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – vCard 4.0正则表达式

发布时间:2020-12-15 17:22:01 所属栏目:百科 来源:网络整理
导读:不久前,我创建了一个程序来处理vCard文件.这可以通过以下几乎完美地完成: (?FIELD[^s:;]+)(;(?PARAM[^:]+))*:(?CONTENT.*(?rn[ t].*)*)$ 但是,这不适用于新的(2011年8月)vCard 4.0标准.问题是vCard 4.0文件使用以下布局: FIELD(:)(;([PARAMETER]="[CON
不久前,我创建了一个程序来处理vCard文件.这可以通过以下几乎完美地完成:

(?<FIELD>[^s:;]+)(;(?<PARAM>[^:]+))*:(?<CONTENT>.*(?>rn[ 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>[^;]*;?)*

该查询似乎同时处理了here提供的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 30314nUnited States of America"
 :;;42 Plantation St.;Baytown;LA;30314;United States of America

它还匹配vCard 4.0规范here中的此示例:

ADR;GEO="geo:12.3457,78.910";LABEL="Mr. John Q. Public,Esq.n
      Mail Drop: TNE QBn123 Main StreetnAny Town,CA  91921-1234n
      U.S.A.":;;123 Main Street;Any Town;CA;91921-1234;U.S.A.

我的免责声明是我没有专门针对vCard的任何专业知识,我只是浏览了一部分规范,并在玩RegExr时查看了示例,因此我可能会遗漏一些边缘情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读