正则表达式匹配所有可能性

时间:2018-07-01 22:37:12

标签: r regex

我想创建一个仅在行以“ line_start”开头然后与所有数字匹配的情况下匹配的正则表达式。

我目前有:

"^line_start.*?(\\d)"

带有文本"line_start 1 abc 2 def 4"的代码在执行1时将返回str_match_all("line_start 1 abc 2 def 4", "^line_start.*?(\\d)"),因为我使用问号将其设置为非贪婪。 如果我删除问号:

"^line_start.*(\\d)"

正则表达式调用str_match_all("line_start 1 abc 2 def 4", "^line_start.*(\\d)")将返回数字4。

如何定义正则表达式,使其返回所有数字(所以1、2和4)?请记住,该行必须以line_start开头。

1 个答案:

答案 0 :(得分:2)

您可以使用

regmatches(x, gregexpr("(?:\\G(?!^)|^line_start)\\D*\\K\\d+", x, perl=TRUE))

请参见regexR demo online

它是具有以下条件的PCRR正则表达式的基本R解决方案:

  • (?:\\G(?!^)|^line_start)-上一次成功匹配的结尾,或者line_start在字符串的开头
  • \\D*-尽可能多的非数字字符
  • \\K-匹配重置运算符会丢弃到目前为止已匹配的所有文本
  • \\d+-1个以上的数字。