在文本中捕捉名称

时间:2017-06-20 13:01:38

标签: python regex

我找到合适的正则表达式时遇到了问题。

有了这个正则表达式,

([\.!?] |^|\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

请帮助我,我是正则表达式的新手,他们可以非常抽象......

2 个答案:

答案 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

Test it on regex101

答案 1 :(得分:0)

Examaple@Regex101

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

<强>模式

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

匹配字符«M\.»

     

负面外观)«(?!.*M\.)»

     

匹配任何非换行符«(.*)»

的单个字符      

匹配字符«[mM]adame l[ea] ministre»

我希望这就是你的意思,也许下次尝试在你的第一次尝试中更清楚。问得好的问题更值得投入时间;)