c# - 用于搜索名字和姓氏的第一个字母的正则表达式模式
问题描述
我对正则表达式模式有疑问。每天我都会得到名字和姓氏。例子:
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 的模式?
也许我没有说清楚.. 但最后,结果应该是我只将姓氏和名字的首字母以及父名传递给模式,并且正则表达式匹配输入字符串。
解决方案
如果存在逗号并且名称可以以 V 或 T 开头,其中第三个名称可以是可选的,则可以使用与除逗号之外的任何非空白字符匹配的可选组。
\bDarkholme\s+[VT][^\s,]+(?:\s+[VT][^\s,]+)?
\b
单词边界,以防止 Darkholme 成为更大单词的一部分Darkholme
从字面上匹配\s+[VT]
匹配 1+ 个空格字符,后跟 V 或 T[^\s,]+
匹配除空格字符或逗号以外的任何字符的 1 次以上(?:
非捕获组\s+[VT]
匹配 1+ 个空格字符,后跟 V 或 T[^\s,]+
匹配除空格字符或逗号以外的任何字符的 1 次以上
)?
关闭组以使第三部分成为可选
如果您知道名称以 V 开头表示第二个,而 T 表示第三个:
\bDarkholme\s+V[^\s,]+(?:\s+T[^\s,]+)?
如果名称也可以是单个 V 或 T,则量词可以是星号[^\s,]*
推荐阅读
- sql - Sql server 分离一个字符串并旋转结果
- vega - 使用 vl2png 时如何应用 vega 主题
- r - ggplot missing plot with x-axis factor
- java - 我想要这个..地图缩放我的多个标记,在一帧中。现在我的地图缩放显示国家的中心位置
- html - 如何在同一行上水平居中 2 个或多个 div
- retina-display - 硬件问题:MacBook 使用的 4k 外接显示器上的小字体?
- python - 如何拒绝 http 请求(抛出一些代码错误)
- c++ - 在函数中分配内存的问题
- r - 尝试更改我的 ggplot 中的中断会删除 y 轴
- python - 进行算术运算时如何保持两个python字典之间的匹配顺序