如何提取某些模式后出现的字符串? [关闭]

问题描述 投票:-1回答:1

我有一些字符串:

str1 = "Information name: Wen Moyes address: Mcity."
str2 = "resume Name : Sam Win Father's name: Dean address"
str3 = "Father's name: Dan. Acknowledge"
str4 = "Father's Name: Joe Cena Name :- John Cena"

我想从Name后面的每个字符串中提取名称。如果string包含Father's name,它应该忽略该部分,只查找name

我的预期输出是:

Wen Moyes
Sam Win
None
John Cena

我尝试了什么:

我在regex下面使用过

re.findall(r'name\s*:(\s*\w*\s\w*)', str1.lower())

这给了我输出为:

[' wen moyes']
[' sam win', ' dean address']
[' dan']
[' joe cena']

我怎么处理这个? 有没有使用正则表达式的替代方法?

谢谢!

python regex python-3.x
1个回答
1
投票

一个选项是Father's的负向lookbehind,然后匹配Name:和可选的空格/破折号,然后捕获以下(\w+ \w+)

str1 = "Information name: Wen Moyes address: Mcity."
str2 = "resume Name : Sam Win Father's name: Dean address"
str3 = "Father's name: Dan. Acknowledge"
str4 = "Father's Name: Joe Cena Name :- John Cena"

pattern = re.compile(r"(?<!Father's )[Nn]ame ?:-? (\w+ \w+)")
for str in [str1, str2, str3, str4]:
    print(re.findall(pattern, str))

https://regex101.com/r/Gp5PDr/1

© www.soinside.com 2019 - 2024. All rights reserved.