R中的正则表达:解开相似的可能性

时间:2015-01-30 13:07:06

标签: regex r replace grep

我有一个看起来像这样的名字列表

Noms<- c("André Coin", "XXXAndré Coin", "Gabriel Péri","Léon Blum", "XXXLéon Blum") 

我正在尝试创建一个函数,每次在非常长的文本中找到每个这些名称时,在以“M”或“Mme”开头的行的开头。

我的文字是一个向量,其中每一行都是一个元素。

最后,匹配"M. André Coin said bla bla"之类的行;但是像"He said bla bla bla to M. André Coin"这样的行不会匹配。

最后的要求是“AndréCoin”可以与“XXXAndréCoin”区别开来。

我目前找到的解决方案是:

findpattern <- function(name,vect) {
    x<-paste0("^.{1,3}((M\\s*)|(Mme\\s*))*\\s*",name)
    found<-grepl(x,vect)
    return(found)
    }

然而,当我运行findpattern(Noms,txt)时,它无法区分“AndréCoin”和“XXXAndréCoin”。意思是findpattern("André Coin", "M. XXXAndré Coin")=TRUE". 你能帮我在正则表达的写作中找到错误吗?

1 个答案:

答案 0 :(得分:0)

你在M之后错过了一个点,并且3个第一个字符必须是optionnal(即0到3个字符):

"^.{0,3}((M\\.\\s*)|(Mme\\s*))*\\s*"

如果M之后的点是optionnal:

"^.{0,3}((M\\.?\\s*)|(Mme\\s*))*\\s*"