正则表达式将字符串分成几部分
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+个单词字符
我有一个具有以下值的字符串,
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+个单词字符