匹配 Python 正则表达式子表达式中的任何字符(包括换行符),而不是全局的
- 2025-03-13 09:06:00
- admin 原创
- 76
问题描述:
我想使用re.MULTILINE
但不是 re.DOTALL
,这样我就可以有一个包含“任何字符”通配符和.
不匹配换行符的普通通配符的正则表达式。
有办法吗?在我想要包含换行符的情况下,我应该使用什么来匹配任何字符?
解决方案 1:
要匹配换行符或不带re.S
/的“任何符号” re.DOTALL
,您可以使用以下任一项:
(?s).
-带有标志的内联修饰符组s
设置了一个范围,其中所有.
模式都匹配任何字符,包括换行符以下任一解决方法:
[sS]
[wW]
[dD]
主要思想是字符类内的相反简写类与输入字符串中的任何符号匹配。
与其他带有交替的变体相比(.|s)
,字符类解决方案效率更高,因为它涉及的回溯更少(与*
或+
量词一起使用时)。比较一下小例子:它需要`(?:.|
)+45 步才能完成,而它只需要
[sS]+`2 步。
查看Python 演示,其中我匹配从 开始123
直到3
行首第一次出现的 的一行,并包括该行的其余部分:
import re
text = """abc
123
def
356
more text..."""
print( re.findall(r"^123(?s:.*?)^3.*", text, re.M) )
# => ['123
def
356']
print( re.findall(r"^123[wW]*?^3.*", text, re.M) )
# => ['123
def
356']
解决方案 2:
匹配任意字符(包括换行符):
正则表达式:(请注意,也使用了空格‘ ’)
[S
]
例子:
import re
text = 'abc def ###A quick brown fox.
It jumps over the lazy dog### ghi jkl'
# We want to extract "A quick brown fox.
It jumps over the lazy dog"
matches = re.findall('###[S
]+###', text)
print(matches[0])
'matches[0]' 将包含:
“一只敏捷的棕色狐狸。\n它跳过了那只懒狗”
'\S' Python 文档的描述:
S
匹配任何非空格字符的字符。
(参见:https://docs.python.org/3/library/re.html#regular-expression-syntax)
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD