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

2024-10-06 09:29:31 发布

您现在位置: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)

输出:

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

Tags: 版本re名称msmmrkmrmrs
2条回答

我将在这里使用模式\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不在您的模式中。字符类[r-sR-S]只能匹配一个字母,而不能匹配两个

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

奖励:这一款同样适用于Miss

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'

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

相关问题 更多 >