2017-04-10 96 views
0

我是新来的正则表达式,我想知道是否有无论如何选择匹配的字符串后的所有数字?正则表达式选择字符串后的所有数字

例如:

输入:

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

非常感谢!

+0

你输入来看,你可能只需要使用'/ \ d +/g'。你可以用你的编程语言来检查一个字符串是否包含“重要的字符串”。什么是编程语言? –

+0

@WiktorStribiżew是的..但问题是这个输入是在另一个大文本,它也有很多数字,和/ \ D +/G将采取所有这些。顺便说一句,我用regex101.com来练习,所以我没有真正使用任何编程语言 –

+0

然后仍然有2个问题:1)你会使用什么样的正则表达式? (Regex101有3个提供); 2)什么是尾部边界(何时停止收集*重要字符串*之后的数字)? –

回答

2

的通用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)|(?<!\bnot)important string) - 无论是前面的匹配成功(\G(?!\A))或不前面有not一个important string字面炭序列的末尾+空间
  • (?:(?!not important string)\D)*? - 除数字以外的任何字符(\D),0+次出现,尽可能少,不是的起始点个字符序列
  • \K - 匹配复位操作
  • \d+ - 1+位数
相关问题