R正则表达式匹配整个单词并考虑标点符号

问题描述 投票:0回答:1

我在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'代替'\\<',但没有成功。

r regex string-matching
1个回答
0
投票
to_match[sapply(paste0('(?:\\s|^)',to_match,'(?:\\s|$)'),grepl,text1)]

关键是单词和非单词字符之间的单词边界匹配,这就是为什么在eye-to-eye中有匹配项的原因。您只想在字符串的开头或结尾与空格之间进行匹配。

在TRE正则表达式中,最好使用组来完成,因为此正则表达式库不支持环视,您只需测试单个模式匹配的字符串以返回true或false。

(?:\s|^)非捕获组匹配任何空格或字符串的开头,(?:\s|$)匹配空白或字符串的结尾。

© www.soinside.com 2019 - 2024. All rights reserved.