我在R中。我想匹配文本中的整个单词,考虑标点符号。示例:
to_match = c('eye','nose')
text1 = 'blah blahblah eye-to-eye blah'
text2 = 'blah blahblah eye blah'
我希望在eye
中匹配text2
,但在text1
中不匹配。
即命令:
to_match[sapply(paste0('\\<',to_match,'\\>'),grepl,text1)]
应返回character(0)
。但是现在,它返回eye
。
我也尝试用'\\b'
代替'\\<'
,但没有成功。
to_match[sapply(paste0('(?:\\s|^)',to_match,'(?:\\s|$)'),grepl,text1)]
关键是单词和非单词字符之间的单词边界匹配,这就是为什么在eye-to-eye
中有匹配项的原因。您只想在字符串的开头或结尾与空格之间进行匹配。
在TRE正则表达式中,最好使用组来完成,因为此正则表达式库不支持环视,您只需测试单个模式匹配的字符串以返回true或false。
(?:\s|^)
非捕获组匹配任何空格或字符串的开头,(?:\s|$)
匹配空白或字符串的结尾。