【发布时间】:2021-02-10 01:24:40
【问题描述】:
我正在尝试使用 grepl() 匹配特定文本,同时确保没有较短的子字符串也返回匹配项。
例如,我希望grepl('liverpool', 'club_futbol_liverpool_fc') 返回TRUE,但我不希望grepl('pool', 'club_futbol_liverpool_fc') 返回TRUE。在这种情况下我不能使用^ 和$,因为我要匹配的文本前后都有字符。写grepl('.*^liverpool$.*', 'club_futbol_liverpool_fc') 也无济于事,我刚刚意识到这与只使用^ 和$ 是一样的。
有没有办法做到这一点?
我应该补充一点,最终目标是在 for 循环中使用这个 grepl() 函数来匹配数据框中的观察结果。不幸的是,liverpool 并不总是被下划线包围,尽管我相信在liverpool 之前或之后总会有至少一个下划线。
【问题讨论】:
-
使用
grepl('(?:\b|_)pool(?:\b|_)', 'club_futbol_liverpool_fc') -
感谢您的回答!我应该补充一点,最终目标是在 for 循环中使用这个 grepl() 函数来匹配数据框中的观察结果。不幸的是,liverpool 并不总是被下划线包围,尽管我相信在 'liverpool' 之前或之后总会有至少一个下划线。
-
什么意思?上面的正则表达式匹配整个单词
pool,即使在下划线内,但不需要下划线。发布您的相关代码。