找到正确的正则表达式时遇到问题。

有了这个正则表达式,

([\.!?] |^|\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女士夫人部长”

但是我的正则表达式捕获到“ M. X. blablabla M. Y. Je suis madame la ministre”

也,
在M. X中,X可以是:
“姓LongSurname-with-spécial-char”
要么
“冗长的标题”

对于前:
https://regex101.com/r/XRCUwc/1

应该抓住:
M.莫里斯·勒罗伊(M. Maurice Leroy)。不可否认,想像不到! (对社会主义团体的哀叹)。《人民报》,法国部长夫人

请帮助我,我是regex的新手,它们可以很抽象...

最佳答案

Examaple@Regex101

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

图案

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



  匹配字符«M\.»
  
  负相纸烟)«(?!.*M\.)»
  
  匹配不是换行符«(.*)»的任何单个字符
  
  匹配字符«[mM]adame l[ea] ministre»


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

09-15 18:13