Python正则表达式匹配多行

10S*_*Tom 2 regex multiline python-3.x

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

示例字符串:

Example=N      ; Comment Line One error=

; Comment Line Two.

Desired=
Run Code Online (Sandbox Code Playgroud)

我正在尝试匹配从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)
Run Code Online (Sandbox Code Playgroud)

我也试过:

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

Wik*_*żew 7

您可以使用

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

请参阅Python 演示

图案详情

  • (?sm)-re.DOTALLre.M
  • ^ - 一行的开始
  • Example= - 一个子串
  • (.*?) - 第 1 组:任何 0+ 个字符,尽可能少
  • (?=[\r\n]+\w+=|\Z)- 正向前瞻,需要存在 1+ CR 或 LF 符号,后跟 1 个或多个字字符,后跟=符号或字符串结尾 ( \Z)。

请参阅正则表达式演示