1

我想阅读 VCard 文件。

我使用这个样本。

但是当我对这个文件使用这个解决方案时。

BEGIN:VCARD
VERSION:4.0
N:Gump;Forrest;;;
FN: Forrest Gump
ORG:Bubba Gump Shrimp Co.
TITLE:Shrimp Man
PHOTO:http://www.example.com/dir_photos/my_photo.gif
TEL;TYPE=work,voice;VALUE=uri:tel:+1-111-555-1212
TEL;TYPE=home,voice;VALUE=uri:tel:+1-404-555-1212
ADR;TYPE=work;LABEL="42 Plantation St.\nBaytown, LA 30314\nUnited States of America"
 :;;42 Plantation St.;Baytown;LA;30314;United States of America
EMAIL:forrestgump@example.com
REV:20080424T195243Z
END:VCARD

找不到电子邮件/电话/地址的参数。

例如,我将此正则表达式用于电话

   RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace;
    regex = new Regex(@"(\n(?<strElement>(TEL)) (;*(?<strAttr>(HOME|WORK)))* (;(?<strType>(VOICE|CELL|PAGER|MSG|FAX)))*  (;(?<strPref>(PREF)))* (;[^:]*)*  (:(?<strValue>[^\n\r]*)))", options);

但 strAttr,strType 的值为空。

如何为这些设置正则表达式?

4

3 回答 3

1

您可以尝试找到现有的库,而不是重新发明轮子。比如这个

于 2012-11-15T07:45:49.433 回答
1

我将此正则表达式用于地址:

   regex = new Regex(@"(?<strElement>(ADR)) (;(?<strAttr>[^\n\r]*))? (:(?<strPo>([^;]*)))  (;(?<strBlock>([^;]*)))  (;(?<strStreet>([^;]*)))  (;(?<strCity>([^;]*))) (;(?<strRegion>([^;]*))) (;(?<strPostcode>([^;]*)))(;(?<strNation>[^\n\r]*))", options);
于 2012-11-17T10:30:48.887 回答
0

你使用什么选项?

如果您不使用IgnorePatternWhitespace,则表达式中的空格是个问题。

另一个问题是,您在“VOICE”之前检查一个;,但在您的字符串中有一个,

你真的需要所有这些*量词吗?如果你想让某些东西成为可选的,最好使用?量词,它只匹配 0 或 1 次。

于 2012-11-15T07:12:36.187 回答