【问题标题】:Regex pattern for search first letters of the first and last name用于搜索名字和姓氏的第一个字母的正则表达式模式
【发布时间】:2020-09-09 09:05:23
【问题描述】:

我对正则表达式模式有疑问。每天我都会得到名字和姓氏。示例:

    Darkholme Van Tadashi
    Herrington Billy Aniki
    Johny
    Walker Sam Cooler
    etc..

事实上,它们是特定的,不只包含一个姓氏和名字。

从这个列表中,我需要选择一个人(我知道他的姓和名)。为此,我找到了模式:

"Darkholme|\b[vt]"

正如我所说,我提前知道了这个人的数据(在列表到达之前)。但我只知道他的姓氏。我不知道第二个和第三个名字(Van Tadashi),我只知道这些名字的第一个字母(“V”和“T”)。我遇到了这个问题:当正则表达式分析传入数据时(我使用 regex.ismatch),如果输入字符串是“Van Dungeonmaster”,它会返回 true。如何创建仅在 surname=Darkholme、第二名和第三名的第一个字母匹配(=V 和 T)时才返回 true 的模式?

也许我没有说清楚.. 但最后应该证明我只将姓氏和名字的首字母以及父名传递给模式,并且正则表达式匹配输入字符串.

【问题讨论】:

  • 假设名称不包含单个字符,像这样? \bDarkholme\s+[VT]\S+\s+[VT]\S+regex101.com/r/ChPFt5/1
  • 列表的正确版本:Darkholme Van Tadashi、Herrington Billy Aniki、Johny Walker Sam Cooler 等。
  • 如果列表中有逗号并且\bDarkholme\s+[VT]\S+(?:\s+[VT]\S+)?(?=,|$)regex101.com/r/W70VmA/1后面可以有2个或3个名字
  • 感谢您的回答!请问,如果列表仅包含姓氏和名字(Darkholme Van),我该如何更改您的模式以找到匹配项?换句话说,父名可以省略,但父名的第一个字母会以模式传递。
  • 如果顺序是V然后T,你仍然可以使用没有字符类的可选组\bDarkholme\s+V\S+(?:\s+T\S+)?regex101.com/r/htCXT3/1

标签: c# regex


【解决方案1】:

您的模式原样意味着“匹配包含Darkholme 的任何字符串或任何单词以vt 开头的任何字符串”,这不是您想要的

也许

Darkholme\s+V\S*\s+T

会更适合你。它的意思是“darkholme 后跟至少一个空格,然后是 V,后跟任意数量的非空白字符,然后是任意数量的空格,然后是 T

【讨论】:

  • 感谢您的回答!请问,如果列表仅包含姓氏和名字(Darkholme Van),我该如何更改您的模式以找到匹配项?换句话说,父名可以省略,但父名的第一个字母会以模式传递。
  • Darkholme\s+V 然后;似乎找到 T 没有用
【解决方案2】:

如果存在逗号,并且名称可以以 V 或 T 开头,其中第三个名称可以是可选的,则可以使用与除逗号之外的任何非空白字符匹配的可选组。

\bDarkholme\s+[VT][^\s,]+(?:\s+[VT][^\s,]+)?
  • \b Word 边界,以防止 Darkholme 成为更大单词的一部分
  • Darkholme 字面匹配
  • \s+[VT] 匹配 1+ 个空格字符,后跟 V 或 T
  • [^\s,]+ 匹配除空格字符或逗号以外的任何字符的 1 次以上
  • (?:非捕获组
    • \s+[VT] 匹配 1+ 个空格字符,后跟 V 或 T
    • [^\s,]+ 匹配除空格字符或逗号以外的任何字符的 1 次以上
  • )?关闭群组以使第三部分成为可选

.NET regex demo

如果你知道名字以 V 开头表示第二个,T 表示第三个:

\bDarkholme\s+V[^\s,]+(?:\s+T[^\s,]+)?

.NET regex demo

如果名称也可以是单个 V 或 T,量词可以是 [^\s,]* 的星号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多