【问题标题】:regex select all number after a string正则表达式选择字符串后的所有数字
【发布时间】:2017-04-10 09:29:07
【问题描述】:

我是正则表达式的新手,我想知道是否有任何方法可以选择匹配字符串后的所有数字?

例如:

输入:

important string abc 100 def 50 ghi jk 10 m 60 not important string aa 90 bb 20

作为输出,我想选择所有这些数字:100、50、10、60

我试过important string[\w\n ]* (\d+),但我只有60个

非常感谢!

【问题讨论】:

  • 根据您的输入判断,您可以只使用/\d+/g。您可以使用您的编程语言方式检查字符串是否包含important string。编程语言是什么?
  • @WiktorStribiżew yea.. 但问题是这个输入是在另一个大文本中,它也有很多数字,/\d+/g 会占用所有这些。顺便说一句,我是用 regex101.com 来练习的,所以我并没有真正使用任何编程语言
  • 那么还有两个问题:1)你将使用什么正则表达式风格? (Regex101 提供 3 个); 2)什么是尾随边界(何时停止收集重要字符串之后的数字)?
  • regex101.com/r/Ajaamu/2 之类的内容可能会有所帮助。
  • @WiktorStribiżew 是的,这就是我要找的,谢谢!

标签: regex string numbers match


【解决方案1】:

在某些文本之间匹配多次出现的通用 PCRE 方法是使用基于 \G 的模式,该模式允许在上一个成功匹配的末尾锚定匹配:

(?:\G(?!\A)|(?<!\bnot )important string)(?:(?!not important string)\D)*?\K\d+

regex demo

基本上,

(?s)(?:\G(?!\A)|STARTING_DELIMITER_STRING)(?:(?!END_DELIMITER_STRING).)*?\K\d+

或者,为了保持在初始 STARTING_DELIMITER_STRING 边界内,将其添加到负前瞻:

(?s)(?:\G(?!\A)|STARTING_DELIMITER_STRING)(?:(?!STARTING_DELIMITER_STRING|END_DELIMITER_STRING).)*?\K\d+

详情

  • (?:\G(?!\A)|(?&lt;!\bnot )important string) - 上一个成功匹配的结尾 (\G(?!\A)) 或前面没有 not + 空格的 important string 文字字符序列
  • (?:(?!not important string)\D)*? - 除数字 (\D) 之外的任何字符,0+ 次出现,尽可能少,这不是 not important string 字符序列的起点
  • \K - 匹配重置运算符
  • \d+ - 1 位以上

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2019-06-16
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多