试图解析出电子名片名称输入与正则表达式名称、电子名片、正则表达式

2023-09-06 16:47:42 作者:狗友很狗i

我有以下的正则表达式解析出一个电子名片(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
 
jq根据文本内容找到元素 Appium之元素定位和UiAutomator表达式

正则表达式指定的< 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.