正则表达式中的正则表达式

时间:2019-11-21 09:27:14

标签: python regex

我一直试图在一个块中解析一个值。

让我举例说明。

我有以下文字:

started xx xxxxxxx xxxxx xxxxxx xx xxxxxxxxx xxxxxxx xxxx xx
xx xxx xxxxx xxxx xxxxxxxx xxxx xxxxxx found 9999 xxxxx xxxxx
xxx xx xxxx xxxx xxxxxxxxxxx xxxxxxx xxx stored 9999 finished

我正在尝试在“开始”和“完成”之间获取价值

我尝试了类似的方法

(?<block>started(.|\n)*finished)

但是我不知道如何在“存储”附近添加值\d+

1 个答案:

答案 0 :(得分:2)

您提供的正则表达式不适用于Python re,因为(?<block>...)不是受支持的命名组语法,它必须看起来像(?P<block>...)

此外,建议避免使用效率极低的(.|\n)*,而将.*?re.DOTALL / re.S(?s)结合使用。

如果您需要捕获stored之后和finished之前的数字(如果是可选的话),请使用

re.findall(r'started(.*?(?:stored\s+(\d+)\s+)?)finished', text, re.S)

请参见regex demo

详细信息

  • started-左定界符
  • (.*?(?:stored\s+(\d+)\s+)?)-组1:
    • .*?-任意0个以上的字符,尽可能少
    • (?:stored\s+(\d+)\s+)?-可选的组匹配
      • stored\s+-stored和1+空格
      • (\d+)-第2组:一个或多个数字
      • \s+-超过1个空格
  • finished-右定界符。