Python 跨多行的正则表达式匹配

Python regex match across multiple lines

我正在尝试跨多行匹配正则表达式模式。该模式以一个子字符串开始和结束,这两个子字符串都必须位于一行的开头。我可以跨行匹配,但我似乎无法指定结束模式也必须在一行的开头。

示例字符串:

Example=N      ; Comment Line One error=

; Comment Line Two.

Desired=

我正在尝试匹配 Example=Desired=。如果 error= 不在字符串中,这将起作用。但是,当它存在时,我匹配 Example=N ; Comment Line One error=

config_value = 'Example'
pattern = '^{}=(.*?)([A-Za-z]=)'.format(config_value)
match = re.search(pattern, string, re.M | re.DOTALL)

我也试过:

config_value = 'Example'
pattern = '^{}=(.*?)(^[A-Za-z]=)'.format(config_value)
match = re.search(pattern, string, re.M | re.DOTALL)

您可以使用

config_value = 'Example'
pattern=r'(?sm)^{}=(.*?)(?=[\r\n]+\w+=|\Z)'.format(config_value)
match = re.search(pattern, s)
if match:
    print(match.group(1))

参见Python demo

图案详情

  • (?sm) - re.DOTALLre.M 开启
  • ^ - 行首
  • Example= - 子字符串
  • (.*?) - 第 1 组:任何 0+ 个字符,尽可能少
  • (?=[\r\n]+\w+=|\Z) - 正先行要求存在 1+ 个 CR 或 LF 符号,后跟 1 个或多个单词字符,后跟 = 符号,或字符串结尾(\Z).

参见regex demo