2013-02-05 51 views
1

我想讀取VCard 4.0文件。VCard 4.0電話正則表達式?

我使用這個示例。

但是當我爲這個文件使用這個解決方案。

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:[email protected] 
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); 


mc = regex.Matches(s); 
      if (mc.Count > 0) 
      { 
       Phones = new Phone[mc.Count]; 
       for (int i = 0; i < mc.Count; i++) 
       { 
        m = mc[i]; 
        Phones[i].number = m.Groups["strValue"].Value; 
        ss = m.Groups["strAttr"].Value; 
        if (ss == "HOME") 
         Phones[i].homeWorkType = HomeWorkType.home; 
        else if (ss == "WORK") 
         Phones[i].homeWorkType = HomeWorkType.work; 

        if (m.Groups["strPref"].Value == "PREF") 
         Phones[i].pref = true; 

        ss = m.Groups["strType"].Value; 
        if (ss == "VOICE") 
         Phones[i].phoneType = PhoneType.VOICE; 
        else if (ss == "CELL") 
         Phones[i].phoneType = PhoneType.CELL; 
        else if (ss == "PAGER") 
         Phones[i].phoneType = PhoneType.PAGER; 
        else if (ss == "MSG") 
         Phones[i].phoneType = PhoneType.MSG; 
        else if (ss == "FAX") 
         Phones[i].phoneType = PhoneType.FAX; 


       } 
      } 

但在空strAttr的價值,strType。

如何爲這些設置正則表達式?

回答