详解Python re.fullmatch.DOTALL函数:启用 “.” 匹配任何字符模式

  • Post category:Python

re模块是Python中处理正则表达式的工具之一。其中re.fullmatch()函数可以用来匹配整个字符串是否符合指定的正则表达式。

DOTALL是re.fullmatch()函数的一个参数,用来指定匹配字符串时是否忽略换行符。

下面给出re.fullmatch()和DOTALL参数的详细说明及使用方法:

re.fullmatch()

re.fullmatch()函数用于匹配整个字符串是否符合指定的正则表达式,如果匹配成功返回匹配对象,否则返回None。

该函数的语法为:

re.fullmatch(pattern, string, flags=0)

其中:

  • pattern:要匹配的模式,可以是字符串或正则表达式对象。
  • string:要匹配的字符串。
  • flags:可选参数,表示正则表达式的匹配模式,如是否区分大小写等。

该函数的返回值是一个匹配对象,如果没有匹配成功,则返回None。匹配对象可以通过group()方法获取匹配到的子字符串,也可以通过start()和end()方法获取匹配子字符串的起始和结束位置。

下面给出一个简单的示例:

import re

pattern = r'^\d{3}-\d{2}-\d{4}$'
string = '123-45-6789'

match_obj = re.fullmatch(pattern, string)

if match_obj:
    print('匹配成功!')
else:
    print('匹配失败!')

输出结果为:匹配成功!

DOTALL

DOTALL是re.fullmatch()函数的一个参数,用来指定匹配字符串时是否忽略换行符。

如果使用DOTALL参数,则‘.’可以匹配任何字符,包括换行符。如果不使用DOTALL参数,则‘.’匹配除了换行符(\n)以外的任何字符。

下面给出一个简单的示例,该正则表达式用DOTALL参数匹配多行文本:

import re

pattern = r'a.+c'
string = 'ab\nc\nad'

match_obj = re.fullmatch(pattern, string, flags=re.DOTALL)

if match_obj:
    print('匹配成功!')
    print('匹配到的字符串:', match_obj.group())
else:
    print('匹配失败!')

输出结果为:

匹配成功!

匹配到的字符串:ab
c

另外,下面这个正则表达式不使用DOTALL参数,也可以匹配多行的文本:

import re

pattern = r'(?s)a.+c'
string = 'ab\nc\nad'

match_obj = re.fullmatch(pattern, string)

if match_obj:
    print('匹配成功!')
    print('匹配到的字符串:', match_obj.group())
else:
    print('匹配失败!')

输出结果为:

匹配成功!

匹配到的字符串:ab
c