regex - 仅一组捕获数次

标签 regex

字符串:

50-60*70/50+(1+7-(9+51))+5*9/10

想要:

9 +51

尝试过:

(?:\(|\G[\+\*\/-])\K(\d+)

结果:

1 7 9 51

最佳答案

您似乎正在使用 PCRE 正则表达式来获取可以在没有内部 ()(...) 中以数学运算符开头的数字。

使用

(?:\(|(?!^)\G)\K[+*\/-]?\d+(?=[^()]*\))

参见 regex demo

解释:

  • (?:\(|(?!^)\G)\K - 查找 ( 或上一次成功匹配的结尾,并省略匹配文本当前存储在内存中(带\K)
  • [+*\/-]? - 一个或零个运算符
  • \d+ - 一个或多个数字
  • (?=[^()]*\)) - 但前提是后跟 ()以外的零个或多个字符 > 直到结束 )

请注意,在您的正则表达式中,您省略了数学运算符,因为它们位于 \K 之前,并且您会在数学运算符或 ( 之后找到数字(以及结束之后每次成功匹配,这就是为什么你得到 17951

关于regex - 仅一组捕获数次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35600023/

相关文章:

java - 正则表达式提取链接内容

regex - 如何按部分grep?

javascript - Javascript 输入格式验证

带有多个字符定界符的 Java String.split

php - 正则表达式抓取最后一场比赛之后的所有文本

regex - 替换字符串中的表情符号会导致奇数字符

Python Regex 在 3 个在线测试人员上成功测试,但在代码中不起作用

python - 修改文本文件

regex - url 中的正则表达式。 Django 2.0 中的 py

regex - 如何使用 ProxyMatch 或 ProxyPassMatch 与 Regex 映射多个上下文路径