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.DOTALL
和 re.M
开启
^
- 行首
Example=
- 子字符串
(.*?)
- 第 1 组:任何 0+ 个字符,尽可能少
(?=[\r\n]+\w+=|\Z)
- 正先行要求存在 1+ 个 CR 或 LF 符号,后跟 1 个或多个单词字符,后跟 =
符号,或字符串结尾(\Z
).
参见regex demo。
我正在尝试跨多行匹配正则表达式模式。该模式以一个子字符串开始和结束,这两个子字符串都必须位于一行的开头。我可以跨行匹配,但我似乎无法指定结束模式也必须在一行的开头。
示例字符串:
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.DOTALL
和re.M
开启^
- 行首Example=
- 子字符串(.*?)
- 第 1 组:任何 0+ 个字符,尽可能少(?=[\r\n]+\w+=|\Z)
- 正先行要求存在 1+ 个 CR 或 LF 符号,后跟 1 个或多个单词字符,后跟=
符号,或字符串结尾(\Z
).
参见regex demo。