如何解决使用正则表达式和 grepl 检测以特定模式开头的单词
我不明白为什么
grepl("see*","file SEC",ignore.case = TRUE)
返回 TRUE
?
我正在尝试查找所有以 see
开头的单词,例如 See
、seeing
、seen
等,然后将其删除。
“file SEC”上面的字符串没有这样的词,但返回了TRUE
。
解决方法
模式 "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
,
其他人提到的问题是问题指定了 glob 而不是 regular expression 或者以不同的方式查看它指定了错误的正则表达式。
我们可以通过使用 startsWith
来测试字符串是否以固定的潜在子字符串开头,从而避免使用正则表达式和 globs 并且只使用固定字符串。它不支持不区分大小写,但我们可以使用 tolower
来实现。
startsWith(tolower(c("file SEC","seer","a seer")),"see")
## [1] FALSE TRUE FALSE
,
试试 grepl("^see","文件 SEC") “^see”的意思是“所有以see开头的字符串”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。