正则表达式将字符串分成几部分

regex to split string into parts

我有一个具有以下值的字符串,

ID Number / 1234
Name: John Doe Smith
Nationality: US

该字符串将始终带有 名称: 预先附加。

我获取全名的正则表达式是 (?<=Name:\s)(.*) 可以很好地获取全名。这个(?<=Name:\s)([a-zA-Z]+)好像得名了

因此,分别获得名字、中间名和姓氏的表达式将是理想的。有人可以指导我正确的方向吗?

谢谢

您可以将它们分为 3 个不同的组:

(?<=Name:\s)([a-zA-Z]+)\s+([a-zA-Z]+)\s+([a-zA-Z]+)
>>> re.search('(?<=Name:\s)([a-zA-Z]+)\s+([a-zA-Z]+)\s+([a-zA-Z]+)', 'Name: John Doe Smith').groups()
('John', 'Doe', 'Smith')

或者,一旦你得到了全名,你可以在结果上应用 split,并得到一个列表中的名字:

>>> re.split(r'\s+', 'John Doe Smith')
['John', 'Doe', 'Smith']

出于某种原因,我假设 Python,但以上内容几乎可以应用于任何编程语言。

正如您在使用 .NET 的评论中所述,您可以在 select 的后视中使用量词 select 您希望 select 在 Name:

例如,要获取姓名的第三部分,可以使用{2}作为量词。

要匹配非空白字符而不是仅匹配单词字符,您可以使用 \S+ 而不是 \w+

(?<=\bName:(?:\s+\w+){2}\s+)\w+
  • (?<=正向lookbehind,断言从当前位置直接向左是:
    • \bName: 防止部分匹配的词边界,匹配Name:
    • (?:\s+\w+){2}整体重复2次,匹配1+个空白字符和1+个单词字符。 (要获得第二个名字,请使用 {1} 或省略量词,要获得名字使用 {0}
    • \s+ 匹配 1+ 个空白字符
  • ) 关闭回顾
  • \w+匹配1+个单词字符

.NET regex demo