在R中使用正则表达式查找整个单词(而不是单词的一部分)

45

我正在寻找正确的正则表达式。以下是需要匹配的字符串:

t1 = c("IGF2, IGF2AS, INS, TH", "TH", "THZH", "ZGTH")
grep("TH",t1, value=T)

返回t1的所有元素,但只有前两个是正确的。我想只返回包含单词/短语TH的条目?


1
尽管已经有两个答案,但是您应该在标题中指定“单词”的含义。TH2TH_TH怎么样? - Nick Sabbe
1
@NickSabbe 提出了一个很好的观点,也是我一直在努力解决的问题。对于以后遇到这个问题的读者,https://dev59.com/Jpzha4cB1Zd3GeqPK9EL#40802619 展示了如何使用其他边界进行操作。 - tjebo
2个回答

52

您需要在搜索字符串周围添加单词边界锚点\b),以便仅匹配整个单词(即由非单词字符或字符串开头/结尾包围的单词,其中“单词字符”表示\w,即字母数字字符)。

尝试

grep("\\bTH\\b",t3, value=T)

在R中,应该是\b。 - undefined

23

您可以在正则表达式中使用\<\>来匹配单词的开头/结尾。

grep ("\\<TH\\>", t1)等。


@Tim Pietzcker更快:) 我想知道这两个正则表达式是否不同? - Anatoliy
2
你的更明确,虽然在这种情况下,它们在功能上是相同的。 - Tim Pietzcker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接