【发布时间】:2012-11-16 16:46:34
【问题描述】:
我有以下正则表达式来解析 vCard:(VB)
Dim options As New RegexOptions()
options = RegexOptions.IgnoreCase Or RegexOptions.Multiline Or RegexOptions.IgnorePatternWhitespace
regex = New Regex("(?<strElement>(N)) (;[^:]*)? (;CHARSET=UTF-8)? (:(?<strSurname>([^;\n\r]*))) (;(?<strGivenName>([^;\n\r]*)))? (;(?<strMidName>([^;\n\r]*)))? (;(?<strPrefix>([^;\n\r]*)))? (;(?<strSuffix>[^;\n\r]*))?", options)
m = regex.Match(s)
If m.Success Then
Surname = m.Groups("strSurname").Value
GivenName = m.Groups("strGivenName").Value
MiddleName = m.Groups("strMidName").Value
Prefix = m.Groups("strPrefix").Value
Suffix = m.Groups("strSuffix").Value
End If
当我有这样的 vCard 时它可以工作:
BEGIN:VCARD
VERSION:2.1
N:Bacon;Kevin;Francis;Mr.;Jr.
FN: Mr. Kevin Francis Bacon Jr.
ORG:Movies.com
但是当vCard这样的时候就不能正常工作了:
BEGIN:VCARD
VERSION:2.1
N:Bacon;Kevin
FN:Kevin Bacon
ORG:Movies.com
正则表达式将
改编的正则表达式来自这里:vCard regex
【问题讨论】:
-
另外,我想知道这甚至可以在第一个示例输入上起作用。为什么不匹配
N:VCARD?还是N:2.1?还是N: Mr. Kevin Francis Bacon Jr.? (好吧,实际上只有前两个是奇数,因为你只返回第一个匹配项) -
另一个:为什么要把
Bacon分配给<strGivenName>?你的意思是Kevin?你的意思是<strSurname>? -
我将 RegexOptions 添加到我原来的问题中,我的意思是 Kevin 作为
。很抱歉造成混乱。 -
IgnorePATTERNwhitepace 仅用于模式注释,不适用于正则表达式过程。您的模式中没有 cmets,也没有跨越多行;因此删除该选项。