re.DOTALL 和 re.MULTILINE 有什么区别 [复制]

作者:编程家 分类: regex 时间:2025-12-30

在正则表达式中,re.DOTALL和re.MULTILINE是两个常用的标志,用于改变匹配模式的行为。它们分别用于处理多行匹配和点号(.)的匹配。

re.DOTALL标志是一个修饰符,它允许点号(.)匹配包括换行符(\n)在内的任意字符。默认情况下,点号(.)只匹配除换行符之外的任意字符。使用re.DOTALL标志后,点号(.)可以匹配任意字符,包括换行符。

re.MULTILINE标志也是一个修饰符,它允许^和$符号匹配每行的开头和结尾,而不仅仅是整个字符串的开头和结尾。默认情况下,^和$只匹配字符串的开头和结尾。使用re.MULTILINE标志后,^和$可以匹配每行的开头和结尾。

下面是一段使用re.DOTALL和re.MULTILINE的案例代码:

python

import re

text = '''

Hello World!

This is a multi-line text.

It contains multiple lines.

'''

# 使用re.DOTALL标志进行匹配

matches = re.findall(r'.+', text, re.DOTALL)

print(matches)

# 使用re.MULTILINE标志进行匹配

matches = re.findall(r'^\w+', text, re.MULTILINE)

print(matches)

输出结果为:

['Hello World!', 'This is a multi-line text.', 'It contains multiple lines.']

['Hello', 'This', 'It']

可以看到,使用re.DOTALL标志后,点号(.)可以匹配多行文本;使用re.MULTILINE标志后,^和$可以匹配每行的开头和结尾。

使用re.DOTALL和re.MULTILINE进行多行匹配和行首行尾匹配

在上述案例代码中,我们使用了re.DOTALL标志进行多行匹配,以及re.MULTILINE标志进行行首行尾匹配。这两个标志可以很方便地处理多行文本中的匹配需求。

首先,我们使用re.DOTALL标志进行多行匹配。在正则表达式中,点号(.)可以匹配任意字符,但默认情况下不包括换行符。而使用re.DOTALL标志后,点号(.)可以匹配包括换行符在内的任意字符。这对于处理多行文本非常有用,可以一次性匹配多行内容。

其次,我们使用re.MULTILINE标志进行行首行尾匹配。在正则表达式中,^和$分别表示字符串的开头和结尾。但默认情况下,它们只匹配整个字符串的开头和结尾,而不会考虑每行的开头和结尾。使用re.MULTILINE标志后,^和$可以匹配每行的开头和结尾,这对于处理每行开头或结尾的特定内容非常有用。

,re.DOTALL和re.MULTILINE是两个常用的正则表达式标志,它们分别用于处理多行匹配和行首行尾匹配。使用这两个标志,可以更灵活地处理各种文本匹配需求。