繁体   English   中英

无法在 python 中使用正则表达式打印预期名称

[英]Unable to print expected name using regex in python

我正在尝试打印名称及其前缀,但对于给定的名称,它无法按预期工作,如下所示。

Python 版本 3.7.7

string4 = 'Mr. Venkat Mr Raj Mr.RK Mr T Mrs Venkat **Mrs. Raj** Ms Githa Ms. Seetha'
re.findall('[Mm][r-sR-S].?\s?[a-zA-Z]*\w', string4)

Output:

['Mr. Venkat',
 'Mr Raj',
 'Mr.RK',
 'Mr T',
 'Mrs Venkat',
 'Mrs',
 'Ms Githa',
 'Ms. Seetha']

我会在这里使用模式\bMr?s?\.?\s*\w+\b

string4 = 'Mr. Venkat Mr Raj Mr.RK Mr T Mrs Venkat Mrs. Raj Ms Githa Ms. Seetha'
names = re.findall(r'\bMr?s?\.?\s*\w+\b', string4)
print(names)

这打印:

['Mr. Venkat', 'Mr Raj', 'Mr.RK', 'Mr T', 'Mrs Venkat', 'Mrs. Raj', 'Ms Githa', 'Ms. Seetha']

您当前模式的原因

[Mm][r-sR-S].?\s?[a-zA-Z]*\w

不匹配Mrs. Raj是上面只能匹配M后跟r ,但s不在您的模式中。 字符 class [r-sR-S]只能匹配一个字母,不能匹配两个。

r'\b[Mm][rR]?[sS]?\.?\s*\w+\b'

奖励:这个也适用于小姐

r'\b[Mm][rR]?[iI]?[sS]{0,2}\.?\s*\w+\b'
import re
string4 = 'Mr. Venkat Mr Raj Mr.RK Mr T Mrs Venkat Mrs. Raj Ms Githa Ms. Seetha Miss. A'

names = re.findall(r'\b[Mm][rR]?[iI]?[sS]{0,2}\.?\s*\w+\b', string4)
print(names)

结果

['Mr. Venkat', 'Mr Raj', 'Mr.RK', 'Mr T', 'Mrs Venkat', 'Mrs. Raj', 'Ms Githa', 'Ms. Seetha', 'Miss. A']

更新:基于@tripleee 的评论。 为了避免像M. NameMris这样的误报,我们应该列出所有可能的情况

r'\b(?:Mr|Mrs|Ms|Miss)\.?\s*\w+\b'

这对我来说比以前的正则表达式更容易阅读,但是如果大小写不确定,我们必须添加更多的大小写。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM