无法在python中使用正则表达式打印预期名称
我试图打印带有前缀的名称,但对于给定名称,它无法按预期工作,如下所示 Python版本3.7.7无法在python中使用正则表达式打印预期名称,python,regex,re,Python,Regex,Re,我试图打印带有前缀的名称,但对于给定名称,它无法按预期工作,如下所示 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',
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']
我会在这里使用模式
\bMr?s?\.\s*\w+\b
:
string4='Venkat先生Raj先生RK先生T夫人Venkat夫人Raj女士Githa女士Seetha'
names=re.findall(r'\bMr?s?\.\s*\w+\b',string4)
打印(姓名)
这张照片是:
['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
与
不匹配Raj夫人
是指上述内容只能与M
后接r
匹配,但s
不符合您的模式。字符类[r-sR-S]
只能匹配一个字母,不能匹配两个。我会在这里使用模式\bMr?S?\.\S*\w+\b
:
r'\b[Mm][rR]?[sS]?\.?\s*\w+\b'
string4='Venkat先生Raj先生RK先生T夫人Venkat夫人Raj女士Githa女士Seetha'
names=re.findall(r'\bMr?s?\.\s*\w+\b',string4)
打印(姓名)
这张照片是:
['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
与不匹配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'
重新导入
string4='Venkat先生Raj先生RK先生T夫人Venkat夫人Raj女士Githa女士Seetha小姐。A'
names=re.findall(r'\b[Mm][rR]?[iI]?[sS]{0,2}\.?\s*\w+\b',string4)
打印(姓名)
结果
['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'
这对我来说比以前的正则表达式更容易阅读,但是如果不能确定大小写,我们必须添加更多的大小写
奖励:这一款同样适用于Miss
r'\b[Mm][rR]?[iI]?[sS]{0,2}\.?\s*\w+\b'
重新导入
string4='Venkat先生Raj先生RK先生T夫人Venkat夫人Raj女士Githa女士Seetha小姐。A'
names=re.findall(r'\b[Mm][rR]?[iI]?[sS]{0,2}\.?\s*\w+\b',string4)
打印(姓名)
结果
['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'
对我来说,这比以前的正则表达式更容易阅读,但是如果不能确定大小写,我们必须添加更多的大小写。对于任意输入,这有点容易出错;例如,它还将提取普通M和MRI。没错。最好跟(先生、太太、小姐)一起去。但是python首先返回
()
中的值。您知道如何让它返回整个匹配的文本,而不是()
中的值吗?我可以通过((Mr |…)…)
得到一对,如果我能猜出你在问什么,你可以使用非分组括号(?:…)
这对于任意输入来说有点容易出错;例如,它还将提取普通M和MRI。没错。最好跟(先生、太太、小姐)一起去。但是python首先返回()
中的值。您知道如何让它返回整个匹配的文本,而不是()
中的值吗?我可以通过((Mr|…)…)
得到一对。如果我能猜出你在问什么,你可以使用非分组括号(?:…)