使用regex和grepl检测以特定模式开头的单词

t40tm48m  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(113)

我不明白为什么grepl("see*", "file SEC", ignore.case = TRUE)返回TRUE
我试图找到所有以see开头的单词,如Seeseeingseen等,并删除它们。“file SEC”上面的字符串没有这样的单词,但返回TRUE

5jvtdoz2

5jvtdoz21#

使用单词边界(\\b

模式"see*"检查“se”后跟任意数量的"e" s(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

kgqe7b3p

kgqe7b3p2#

其他人提到的问题是,问题是指定glob而不是regular expression,或者从不同的Angular 来看,它指定了错误的正则表达式。
我们可以通过使用startsWith来避免正则表达式和globs,并且只使用固定的字符串。startsWith测试字符串是否以固定的潜在子串开始。它不支持大小写不敏感,但我们可以使用tolower来获得。

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

字符串

jckbn6z7

jckbn6z73#

try grepl(“^see”,“file SEC”)“^see”表示“所有以see开头的字符串”

相关问题