我不明白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链接以了解更多信息。