gpt4 book ai didi

python - 匹配任何字符,包括 Python 正则表达式子表达式中的换行符,而不是全局匹配

转载 作者:IT老高 更新时间:2023-10-28 21:57:38 26 4
gpt4 key购买 nike

我想使用 re.MULTILINE不是 re.DOTALL , 这样我就可以拥有一个包含“任何字符”通配符和不匹配换行符的普通 . 通配符的正则表达式。

有没有办法做到这一点?在我想包含换行符的情况下,我应该使用什么来匹配任何字符?

最佳答案

要匹配换行符或不带 re.S/re.DOTALL 的“任何符号”,您可以使用以下任何一种:

  1. (?s). - inline modifier group使用 s 标志设置所​​有 . 模式匹配任何字符的范围,包括换行符

  2. 以下任何解决方法:

[\s\S]
[\w\W]
[\d\D]

主要思想是字符类中相反的速记类匹配输入字符串中的任何符号。

将其与 (.|\s) 和其他带有交替的变体进行比较,字符类解决方案效率更高,因为它涉及的回溯更少(与 * 一起使用时) code> 或 + 量词)。比较小例子:它需要(?:.|\n)+ 45步完成,需要[\s\S]+只需 2 个步骤。

查看 Python demo我匹配以 123 开头的行,直到行首第一次出现 3 并包括该行的其余部分:

import re
text = """abc
123
def
356
more text..."""
print( re.findall(r"^123(?s:.*?)^3.*", text, re.M) )
# => ['123\ndef\n356']
print( re.findall(r"^123[\w\W]*?^3.*", text, re.M) )
# => ['123\ndef\n356']

关于python - 匹配任何字符,包括 Python 正则表达式子表达式中的换行符,而不是全局匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33312175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com