正则表达式.如果以Mr / Mrs / ms开头,我不明白怎么得到整个名字



我不明白re模块是如何工作的。如果只有一个名字或多个名字(姓氏),我执行了多次尝试来获取整个名字。

如果字符串有可选的姓氏,这是我用来获取名称的re.compile()格式:

the_formmat = re.compile(r"Mr?s?.?s[A-Z][a-z]+s[A-Z][a-z]+")
the_string = "this is Mr Samantha Rajapaksa and his wife Mrs. Chalani Rajapaksa. his fathers name is Mr Prabath and his mothers name is Mrs Karunarathnage Dayawathi Bandara Peiris "
print(the_formmat.findall(the_string))

我知道?修饰语的用例,但如果有一个或多个,我不知道把它放在哪里以获得姓氏。

从上面的例子中,我得到了这样的输出:
['Mr Samantha Rajapaksa', 'Mrs. Chalani Rajapaksa', 'Mrs Karunarathnage Dayawathi']
我想要的输出是:
['Mr Samantha Rajapaksa', 'Mrs. Chalani Rajapaksa', 'Mr Prabath', 'Mrs Karunarathnage Dayawathi Bandara Peiris']

试试这个正则表达式:

/(?:Mr|Ms|Mrs).?(?: [A-Z][a-z]+)+/

编辑感谢@treuss。

因此将the_formmat变量更改为:

the_formmat = re.compile(r"(?:Mr|Ms|Mrs).?(?: [A-Z][a-z]+)+")

如果它检查Mr/Ms/Mrs,然后当有空格时,它会继续检查以大写字母开头的单词,直到不再匹配为止。

您可以查看RegExr链接以了解更多信息。

最新更新