[英]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. Name
或Mris
这样的误报,我们应该列出所有可能的情况
r'\b(?:Mr|Mrs|Ms|Miss)\.?\s*\w+\b'
这对我来说比以前的正则表达式更容易阅读,但是如果大小写不确定,我们必须添加更多的大小写。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.