【问题标题】:Regular Expression to pick out values from vcard正则表达式从 vcard 中挑选值
【发布时间】:2014-03-27 12:20:57
【问题描述】:
BEGIN:VCARD
VERSION:3.0
PRODID:-//Apple Inc.//iOS 5.1//EN
N:Tom;First ;Mid;Pre;Suffg
FN:Pre First Mid Tom Suffg
NICKNAME:Nick
X-PHONETIC-FIRST-NAME:Fn
X-PHONETIC-LAST-NAME:Ln
ORG:The Organization;
TITLE:VP Investor Relations
TEL;type=WORK;type=VOICE;type=pref:003-000-11111
item1.ADR;type=WORK;type=pref:;;;test;VA;12345;
BDAY;value=date:1992-03-27
item2.X-ABDATE;type=pref:2014-03-27
item2.X-ABLabel:_$!<Anniversary>!$_
item3.X-ABDATE:2013-03-27
item3.X-ABLabel:_$!<Other>!$_
NOTE:Test note
REV:2014-03-27T10:25:11Z
UID:2DCC7DC1-04F4-4A1E-A268-80E346F610AD
END:VCARD

我需要知道正则表达式来挑选日期值(生日、周年纪念日、其他)。

任何帮助将不胜感激。

Eidt:我只是要求选择日期值,我可以选择其他值。给出的链接对我没有帮助。

【问题讨论】:

  • 你的尝试是什么?
  • 他的问题似乎已经被问及回答了:stackoverflow.com/questions/13420851/… - 我建议你以类似的方式实现你的生日解析,如果你遇到困难,指定你的困难在另一个问题中
  • 谷歌搜索“日期的正则表达式”对您没有帮助吗?
  • @Jerry :我试过这个来选择生日日期,但没有运气 regex = new Regex(@"(?(BDAY)) (:(?([^\n\ r]*)))", 选项);
  • @Syeda 我添加了一个答案,说明该正则表达式有什么问题。你还没走远:)

标签: c# regex vcf-vcard


【解决方案1】:

您所拥有的非常接近,但需要进行一些更改:

(?<strElement>(BDAY)) (:(?<strBDAY>([^\n\r]*)))
              ^    ^  ^            ^        ^ ^

我上面指出的部分要么是不必要的(在括号的情况下),要么是导致问题的部分。

将空格更改为\S+ 之类的东西,并删除多余的括号:

(?<strElement>BDAY)\S+:(?<strBDAY>[^\n\r]*)

regex101 demo

【讨论】:

    【解决方案2】:

    没有 DataTime 验证:

    \d{4}\-\d{2}\-\d{2}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 2018-10-02
      • 2013-06-27
      • 1970-01-01
      相关资源
      最近更新 更多