Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在python中使用正则表达式打印预期名称_Python_Regex_Re - Fatal编程技术网

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

无法在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',

我试图打印带有前缀的名称,但对于给定名称,它无法按预期工作,如下所示

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']

我会在这里使用模式
\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|…)…)
得到一对。如果我能猜出你在问什么,你可以使用非分组括号
(?:…)