Python正则表达式re.I语法详解:如何实现忽略大小写匹配

正则表达式(Regular Expression)

Python正则表达式re.I语法详解:如何实现忽略大小写匹配

正则表达式是用于匹配字符串的工具。它能依据特定规则来匹配字符串。正则表达式一般由一组字符以及字符集合构成。字符集合定义了匹配的字符类型与位置。

re.I

语法: re.IGNORECASE 或简写为 re.I

含义: 进行忽略大小写匹配。

在 Python 里,能够利用 re 模块里的 re.IGNORECASE 标志达成正则表达式对大小写的忽略。举例来讲,倘若要去匹配字符串 apple ,就可以运用如下代码。

import re  
  
re 模块中的 compile 函数被用于创建一个正则表达式模式对象,这里创建的模式是 'apple',并且设置了 re.I 标志,使其在匹配时不区分大小写。
text = 'The apple is red'  
  
match = pattern.search(text)  
  
if match:  
    print(match.group())  
else:  
    print('未找到匹配的字符串')

运行结果:

在上述代码里,re.I 这个标志被用于匹配字符串“apple”,也就表明在进行匹配操作时会忽略大小写。pattern.search(text)这个函数会返回一个 Match 对象,如果找到了与之匹配的字符串,那么就会调用 match.group()方法并将其打印出来;倘若没有找到匹配的字符串,就会打印出未找到匹配的相关信息。

re.A

语法: re.ASCII 或简写为 re.A

作用:ASCII 指的是 ASCII 码的含义。它能使 \w、\W、\b、\B、\d、\D、\s 和 \S 这些字符类仅匹配 ASCII 字符,而非 Unicode 字符。

使用 re 模块进行正则表达式匹配时,能够使用 re.ASCII 或 re.A 标志去匹配 ASCII 字符集,而非 Unicode 字符集。这也就表明,\w、\W、\b、\B、\d、\D、\s 和 \S 这些仅会匹配 ASCII 字符,并非 Unicode 字符。

以下是一个使用re.ASCII或re.A标志的简单示例:

import re
# 匹配ASCII字符集中的数字和字母
使用 re 模块的 compile 函数创建了一个正则表达式模式,该模式匹配一个或多个字母数字字符,并且设置了 ASCII 标志。
text = 'Hello 世界 123'
match = pattern.findall(text)
print(match)

在上述示例里,我们运用 re.compile()函数构建了一个正则表达式对象,此对象启用了 re.ASCII标志。接着,我们借助该对象的 findall()方法在文本里查找匹配项。因为我们启用了 re.ASCII标志,所以只有 ASCII 字符集中的数字和字母能够被匹配到,而中文字符则被忽略掉。因此,输出结果为['Hello',

'123'],而不包括'世界'这个中文字符。re.S

语法: re.DOTALL 或简写为 re.S

作用:DOT 具有特定的表示,ALL 表示所有。将它们连起来,意思就是匹配所有的内容,其中包括换行符\n。在默认模式下,.是不能够匹配行符\n的。

如果没有设置这个标志,“.”符号将不匹配换行符。

以下是一个使用re.DOTALL标志的示例:

import re
text = 'hello\nworld'
re 模块中的 compile 函数被用于创建一个正则表达式模式对象,这里的模式是.*,并且设置了 re.DOTALL 标志,该标志表示点号(.)匹配包括换行符在内的所有字符。
match = pattern.match(text)
print(match.group(0))

运行结果:

'hello\nworld'

可以看到,由于使用了 re.DOTALL 标志,“.”符号具备了匹配换行符的能力,因此整个文本都被匹配了。

需要注意的是,re.DOTALL 这一标志仅对“.”符号起作用,而其他的元字符以及字符类依然按照原本的规则进行匹配。

如果需要匹配包含换行符等所有字符,那么可以运用如下的正则表达式。

使用 re.compile 函数创建了一个模式对象 pattern,该模式可以匹配任意内容,并且支持 DOTALL 和 MULTILINE 标志。

这里使用了 re.MULTILINE 标志,这个标志表示进行多行匹配,其作用是让“.”符号能够匹配换行符。

语法: re.MULTILINE 或简写为 re.M

含义:多行模式意味着当某字符串中包含换行符\n时,在默认模式下是不具备换行符特性的,例如行开头和行结尾等情况,然而在多行模式下是可以支持匹配行开头的。

在 Python 里,能够利用 re 模块里的 re.MULTILINE 标志达成正则表达式的多行匹配这一效果。

例如,如果要匹配字符串apple,可以使用以下代码:


import re
re 模块中的 compile 函数被用于创建一个模式对象,该模式对象用于匹配字符串中的特定模式。这里创建的模式是 'apple',并且设置了 re.MULTILINE 标志,这意味着模式将在多行字符串中进行匹配。
text = 'The apple is red'
match = pattern.search(text)
if match:
    print(match.group())
else:
    print('未找到匹配的字符串')

运行结果:

在上述代码里,re.MULTILINE 这个标志被用于匹配字符串“apple”,这就表明能够在一行当中匹配多个字符串。pattern.search(text)这个函数会返回一个 Match 对象,要是找到了匹配的字符串,那么就会调用 match.group()方法并将其打印出来,要是没找到匹配的字符串,就会打印出未找到匹配的字符串。

正则语法中,^ 用于匹配行开头,\A 用于匹配字符串开头。在单行模式下,^ 和 \A 的效果是一致的。而在多行模式下,\A 不能识别 \n。

re.X

语法: re.VERBOSE 或简写为 re.X

作用: 详细模式,可以在正则表达式中加注解!

re.VERBOSE 或简写为 re.X 是 re.compile()函数里的一个可选参数,此参数可用于在正则表达式中添加注释。它具备能让在正则表达式中使用空格、换行符以及注释的功能,进而使正则表达式更便于阅读和理解。

例如:

import re
# 匹配电子邮件地址
pattern = re.compile(r'''
    ^                   # 匹配字符串开头
包含字母、数字、点、加号和减号的用户名,例如[\w\.\+\-]+ 。
    @                   # @ 符号
包含字母、数字、点和减号的域名,例如[具体域名示例]等,这些域名都符合该描述。
    \.                  # . 符号
域名后缀是由 2 到 4 个字母组成的,例如.com、.net 等。它可以是各种不同的组合,如.cn、.org 等。这些后缀在互联网中具有特定的含义和用途,用于区分不同类型的网站和网络服务。
    $                   # 匹配字符串结尾
''', re.VERBOSE)
# 测试正则表达式
使用 pattern 去匹配 'john.doe+test@example.com' ,然后进行打印输出。

输出:

re.L

语法: re.LOCALE 或简写为 re.L

作用:当前语言区域决定了 \w、\W、\b、\B 以及大小写敏感匹配。这个标记仅对 byte 样式有效。官方已不推荐使用该标记,因为语言区域机制不可靠,它一次只能处理一个“习惯”,且仅对 8 位字节有效。

re.LOCALE 或 re.L 是 re.compile()函数的一个可选参数,此参数可用于启用本地化匹配。它会依据当前系统的本地化设置,对正则表达式中的某些字符类别,像\w、\W、\b、\B 等进行本地化处理,进而能够匹配更广泛的字符集。

使用 re.LOCALE 有可能对正则表达式的行为产生影响,这是因为它依赖于系统的本地化设置。所以,要是需要编写能够在不同环境中使用的正则表达式,最好不要使用 re.LOCALE。

以下是一个使用 re.LOCALE 的示例:

import re
# 匹配非字母数字字符
re 模块中的 compile 函数创建了一个正则表达式模式对象,该模式为 r'\W+',并且使用了 re.LOCALE 标志,用于匹配各种非单词字符(包括空格、标点符号等)。
# 测试正则表达式
使用 pattern 去查找 'Hello, 你好!' 中的内容,然后将找到的结果通过 print 函数输出。

输出:

[',', '!']

re.U

语法: re.UNICODE 或简写为 re.U

作用:它类似于 ASCII 常量,能够匹配 unicode 编码所支持的字符。然而,Python3 中默认的字符串本身就是 Unicode 形式的,所以在这种情况下,它就显得有些多余了。

re.UNICODE 或被简写为 re.U,它是 re.compile()函数里的一个可选参数,其作用是启用 Unicode。

匹配模式会把正则表达式里的某些字符类别,像\w、\W、\b、\B等,拓展到 Unicode 字符集中,以此来匹配更广泛的字符集。

在 Python 3 里,默认的情况是所有正则表达式都开启了 Unicode 匹配模式。因此,在大部分情况下,是不需要去使用 re.UNICODE 的。

以下是一个使用 re.UNICODE 的示例:

import re
# 匹配非字母数字字符
re.compile(r'\W+', re.UNICODE) 这个语句创建了一个用于匹配非单词字符的模式对象,其中 '\W+' 表示匹配一个或多个非单词字符,re.UNICODE 表示使用 Unicode 字符集进行匹配。
# 测试正则表达式
print(pattern.findall('Hello, 你好!'))

输出:

[',', '!']

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读