我想创建一个仅在行以“ 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
开头。
答案 0 :(得分:2)
您可以使用
regmatches(x, gregexpr("(?:\\G(?!^)|^line_start)\\D*\\K\\d+", x, perl=TRUE))
请参见regex和R demo online。
它是具有以下条件的PCRR正则表达式的基本R解决方案:
(?:\\G(?!^)|^line_start)
-上一次成功匹配的结尾,或者line_start
在字符串的开头\\D*
-尽可能多的非数字字符\\K
-匹配重置运算符会丢弃到目前为止已匹配的所有文本\\d+
-1个以上的数字。