【问题标题】:using regex and grepl to detect words starting with a specific pattern使用 regex 和 grepl 检测以特定模式开头的单词
【发布时间】:2021-09-21 18:23:32
【问题描述】:

我不明白为什么 grepl("see*", "file SEC", ignore.case = TRUE) 返回TRUE

我正在尝试查找所有以see 开头的单词,例如Seeseeingseen 等并将它们删除。 “file SEC”上面的字符串没有这个词,却返回了TRUE

【问题讨论】:

  • 如果你有多个单词字符,你可能必须使用单词边界,就像我的回答一样

标签: r regex grepl


【解决方案1】:

模式"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

【讨论】:

  • 谢谢!!!最后一个例子正是我要找的。​​span>
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-07-26
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多