捕捉文本中的名称

2024-05-23 18:28:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我找不到合适的正则表达式。你知道吗

有了这个正则表达式

([\.!?] |^|\n)(M\. \b.*?)\b[.,].*(?!(M\. )).*?([mM]adame l[ea] ministre)

我有一个文集,上面写着 “M.X.Blabla(M.X说什么)M.Y.Blabla(M.Y说什么)”

我必须在他们的谈话中找到一个女部长或男部长。你知道吗

例如,M.Y说“我是部长夫人”,我想抓住: “我是部长夫人”

但我的正则表达式中有“M.X.Blabla M.Y.Je suis madame la ministre”

还有, 在M.X中,X可以是: “姓LongSurname,带特殊字符” 或 “长标题”

例如: https://regex101.com/r/XRCUwc/1

应该抓住: 莫里斯·勒罗伊先生。这是我的想象!(社会团体银行的感叹声)«我的员工,我的朋友,部长夫人

请帮帮我,我是新来的正则表达式和他们可以真的抽象。。。你知道吗


Tags: 标题lamm夫人jeea文集特殊字符
2条回答

Examaple@Regex101

我想我知道你想要的是什么,那就是找到Mr.的最后一次出现直到下一次madame le ministre

模式

re.findall("M\.(?!.*M\.)(.*)[mM]adame l[ea] ministre", text)

Match the characters «M\.»

Negative lookahea) «(?!.*M\.)»

Match any single character that is not a line break character «(.*)»

Match the characters «[mM]adame l[ea] ministre»

我希望这就是你的意思,也许下次你第一次尝试的时候会更清楚。问得好的问题更值得花时间去研究;)

以下是从你的文本中提取名字的建议:

(M\. [A-Z][A-zéè-]+( [A-Z][A-zéè-]+)?)|([mM]adame l[ea] ministre)

它寻找一个M.,后跟一个firstname和一个lastname(lastname是可选的)。Firstname和lastname定义为以大写字母([A-Z][a-z]+)开头的字符串。你知道吗

它从M. Foobar. Blablabla M. Barfoo. Blublublu madame le ministre中提取:

M. Foobar
M. Barfoo
madame le ministre

Test it on regex101

相关问题 更多 >