我有以下的正则表达式解析出一个电子名片(VB)
昏暗的选项作为新RegexOptions()
选项= RegexOptions.IgnoreCase或者RegexOptions.Multiline或者RegexOptions.IgnorePatternWhitespace
正则表达式=新的正则表达式((小于strElement>(N))([^:] *)(;字符集= UTF-8)(:???(小于strSurname>([^; \ñ\ r ] *)))((< strGivenName>([^; \ñ\ R] *)))(;(< strMidName>([^;吗?\ n \ r] *)))( (?< STR preFIX>([^; \ñ\ R] *)))?((< strSuffix> [^; \ñ\ R] *))选项)
米= regex.Match(多个)
如果m.Success然后
姓= m.Groups(strSurname)。值
GivenName上= m.Groups(strGivenName)。值
MiddleName = m.Groups(strMidName)。值
preFIX = m.Groups(海峡preFIX)。值
后缀= m.Groups(strSuffix)。值
结束如果
它工作时,我有一个像电子名片:
BEGIN:VCARD
版本:2.1
N:培根;凯文·弗朗西斯;先生; JR。
FN:凯文·培根小先生
ORG:Movies.com
不过,这并不正常工作时,电子名片是这样的:
BEGIN:VCARD
版本:2.1
N:培根;凯文·
FN:凯文·培根
ORG:Movies.com
正则表达式指定的< strSuffix>凯文,而不是< strGivenName>像我想要的。我该如何解决这个问题?
改编正则表达式从这里走来:电子名片的正则表达式
解决方案您要善于用正则表达式
^N(?:;(?!CHARSET=UTF-8)[^:]*|)(?:;CHARSET=UTF-8|):(?<strSurname>[^;\n\r]*);?(?<strGivenName>[^;\n\r]*);?(?<strMidName>[^;\n\r]*);?(?<str$p$pfix>[^;\n\r]*);?(?<strSuffix>[^;\n\r]*)请参阅 这 示例和的这个 的例子。
I have the following Regex to parse out a 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
It works when I have a vCard like:
BEGIN:VCARD
VERSION:2.1
N:Bacon;Kevin;Francis;Mr.;Jr.
FN: Mr. Kevin Francis Bacon Jr.
ORG:Movies.com
But it doesn't work correctly when the vCard is like this:
BEGIN:VCARD
VERSION:2.1
N:Bacon;Kevin
FN:Kevin Bacon
ORG:Movies.com
The regex assigns the <strSuffix> to Kevin, and not <strGivenName> like I wanted. How can I fix this?
Adapted regex came from here: vCard regex
解决方案You should be good with regex pattern
^N(?:;(?!CHARSET=UTF-8)[^:]*|)(?:;CHARSET=UTF-8|):(?<strSurname>[^;\n\r]*);?(?<strGivenName>[^;\n\r]*);?(?<strMidName>[^;\n\r]*);?(?<strPrefix>[^;\n\r]*);?(?<strSuffix>[^;\n\r]*)
See this example and this example.