R 正则表达式使用“+”“?” 或者 ”*”

Mil*_*les 1 regex r

来自https://stringr.tidyverse.org/articles/regular-expressions.html

它描述了使用以下方法控制模式出现的次数:

  • ?:0 或 1。
  • +:1个或更多。
  • *:0或更多。

所以这很有效:

str_view("hello123world", "123?")
Run Code Online (Sandbox Code Playgroud)

然而,为什么不是这个?

str_view("cycyccyccccc", "ccc?")
Run Code Online (Sandbox Code Playgroud)

以上突出显示了字符串开头的 cc。

我期待它在最后一行 c 中突出显示三个 c。

Gre*_*reg 8

您传递的正则表达式"ccc?"意味着(用文字表示)“c 后跟 c 后跟零或一个 c”,因此str_view为您提供连续两个 c 的第一个实例(因为 c 后跟 c 后跟零 c)。

如果你想要正好 3 c,你可以使用

str_view("cycyccyccccc", "ccc")
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要 3 个或更多 c,则可以使用

str_view("cycyccyccccc", "c{3,}")
Run Code Online (Sandbox Code Playgroud)

  • 啊,好吧 - 那是因为您正在搜索(用单词)c 后跟 c 后跟零个或多个 c(? 符号的含义)。我会改变答案 (2认同)