【发布时间】: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