使用正则表达式和grepl来检测以特定模式开头的单词

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

我不明白为什么

grepl("see*", "file SEC", ignore.case = TRUE)
返回
TRUE

我试图找到所有以

see
开头的单词,例如
See
seeing
seen
等,并将其删除。 “file SEC”上面的字符串没有这样的单词,但返回了
TRUE

r regex grepl
3个回答
6
投票

使用单词边界 (

\\b
)

模式

"see*"
检查“se”后跟任意数量的
"e"
(
e*
)(包括零),因此“SE”匹配。

我相信你可能想研究这样的东西,没有“*”

grepl("^see", "file SEC", ignore.case = TRUE)

FALSE

除了“^”符号之外,您还可以包含单词边界

\\b
,这样您就可以检测以模式开头的单词,但在多单词字符内排除那些不以该模式开头的单词:

grepl("\\bSee", c("file SEC", "See", "seeing", "seen", "he was seen", "He did not forsee the event"), ignore.case = TRUE)
[1] FALSE  TRUE  TRUE  TRUE  TRUE  FALSE

2
投票

其他人提到的问题是问题是指定一个glob而不是一个正则表达式,或者以不同的方式查看它指定了错误的正则表达式。

我们可以通过使用

startsWith
来避免正则表达式和通配符,只使用固定字符串,它测试字符串是否以固定的潜在子字符串开头。它不支持区分大小写,但我们可以使用
tolower
来实现。

startsWith(tolower(c("file SEC", "seer", "a seer")), "see")
## [1] FALSE  TRUE FALSE

0
投票

尝试 grepl("^see", "文件 SEC") “^see”表示“所有以 see 开头的字符串”

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