我找到合适的正则表达式时遇到了问题。
有了这个正则表达式,
([\.!?] |^|\n)(M\. \b.*?)\b[.,].*(?!(M\. )).*?([mM]adame l[ea] ministre)
我有一个名字风格的语料库 “M. X. blablabla(M. X所说的)M。Y. blablabla(M. Y.所说的)”
我必须在他们的谈话中出现[mM] adame l [ae] ministre(女性或男性)。
因此,例如M. Y说“Je suis madame la ministre”我想抓住: “M. Y. Je suis madame la ministre”
但是我的正则表达式抓住了“M. X. blablabla M. Y. Je suis madame la ministre”
另外, 在M. X中,X可以是: “姓名姓氏LongSurname-With-spécial-char” 要么 “冗长的长标题”
对于前: https://regex101.com/r/XRCUwc/1
应该抓住: 的微米。 Maurice Leroy。Décidémentnon,l'imagination n'est pas au au pouvoir! (Exclamations sur les bancs du groupe socialiste。)«L'emploi nesedécrètepas»,avez-vousécrit, madame le ministre
请帮助我,我是正则表达式的新手,他们可以非常抽象......
答案 0 :(得分:1)
以下是从您的文字中提取姓名的建议:
(M\. [A-Z][A-zéè-]+( [A-Z][A-zéè-]+)?)|([mM]adame l[ea] ministre)
它寻找一个M.
后跟一个名字和一个姓氏(姓氏是可选的)。 Firstname和lastname定义为以大写字母([A-Z][a-z]+
)开头的字符串。
摘自M. Foobar. Blablabla M. Barfoo. Blublublu madame le ministre
:
M. Foobar
M. Barfoo
madame le ministre
答案 1 :(得分:0)
我想我知道你想要什么,即找到Mr.
的最后一次出现,直到下一个madame le ministre
<强>模式强>
re.findall("M\.(?!.*M\.)(.*)[mM]adame l[ea] ministre", text)
匹配字符«
M\.
»负面外观)«
(?!.*M\.)
»匹配任何非换行符«
的单个字符(.*)
»匹配字符«
[mM]adame l[ea] ministre
»
我希望这就是你的意思,也许下次尝试在你的第一次尝试中更清楚。问得好的问题更值得投入时间;)