我想创建一个正则表达式,它只匹配以“line_start”开头的行,然后匹配所有数字。
我目前有:
"^line_start.*?(\\d)"
使用文本 "line_start 1 abc 2 def 4"
当我执行 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
开头。
最佳答案
你可以使用
regmatches(x, gregexpr("(?:\\G(?!^)|^line_start)\\D*\\K\\d+", x, perl=TRUE))
参见 regex和 R demo online .
它是一个基本的 R 解决方案,具有匹配的 PCRE 正则表达式:
(?:\\G(?!^)|^line_start)
- 上一个成功匹配的结尾或字符串开头的line_start
\\D*
- 尽可能多的任何非数字字符\\K
- 匹配重置运算符丢弃目前匹配的所有文本\\d+
- 1+ 位数字。
关于正则表达式匹配所有可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51127479/