我有一个看起来像这样的名字列表
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".
你能帮我在正则表达的写作中找到错误吗?
答案 0 :(得分:0)
你在M
之后错过了一个点,并且3个第一个字符必须是optionnal(即0到3个字符):
"^.{0,3}((M\\.\\s*)|(Mme\\s*))*\\s*"
如果M
之后的点是optionnal:
"^.{0,3}((M\\.?\\s*)|(Mme\\s*))*\\s*"