regex in regex block



我一直在尝试解析块中的值。

让我举例说明。

我有以下文本:

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

我正在尝试获取"已开始"one_answers"已完成"之间的值

我试过这种

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

但我不知道如何在"存储"附近添加值d+

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

此外,建议避免使用效率非常低的(.|n)*,而是将.*?re.DOTALL/re.S(?s)一起使用。

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

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

查看regex演示

详细信息

  • started-左侧分隔符
  • (.*?(?:storeds+(d+)s+)?)-Gropup 1:
    • .*?-任何0+个字符,尽可能少
    • (?:storeds+(d+)s+)?-可选组匹配
      • storeds+-stored和1+空白
      • (d+)-组2:一个或多个数字
      • s+-1+空白
  • finished—右侧分隔符

最新更新