正则表达式,perl匹配特定文本之前的数字

时间:2014-12-22 22:07:55

标签: regex perl

请澄清我有一堆格式错误的文本文件,我必须从中获取数据。 文本示例:

my $content = "Abracadabra 10 anbracadabra 20 blah \n blah 1220 blah \nblah IMPORTANT blah blah 10 abracadabra 10"

我需要得到1220.即最接近的数字从左到右依次为“重要”。 问题是序列可以有任意数量的数字。 我做了一个有效的表达式,但我必须确切地告诉它有多少位数:

my ($number) = $content=~m/.*(\d\d\d\d).*?IMPORTANT/gs

像(\ d +)这样的东西显然只给我一个最后的数字..

如果可能的话,请给出一些解释而不是裸码。 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

\b(\d+)\D*?IMPORTANT

RegEx Demo

  • 使用字边界即\b(\d+)
  • 匹配捕获组中的1个或多个数字
  • 后跟0个或更多个非数字\D*?(非贪婪)
  • 后跟文字文字IMPORTANT

对于您的示例,它会在捕获的组中提供1220