Python 提供了一些标志(flags)来修改正则表达式引擎的默认行为。让我们一起深入探讨这些功能,看看它们是如何工作的:
- 大小写不敏感
- 点号匹配换行符
- 多行模式
- 详细模式
- 调试模式
大小写不敏感
re.IGNORECASE 标志允许正则表达式在匹配时忽略大小写。在这里,匹配结果是基于所提供字符串的实际大小写返回的,而不是受限于正则表达式本身的写法。
Python3
CODEBLOCK_a37e2a19
Output
点号匹配换行符
通过使用 INLINECODEc4e9a3d2 标志,我们可以修改点号(INLINECODE7d74d9a5)的行为,使其除了匹配其他字符外,还能匹配换行符。在介绍这个标志之前,让我们先来看看在不使用它的情况下,正则引擎是如何响应换行符的。
Python3
CODEBLOCK_fc33cca1
Output
在这个例子中,正则表达式匹配了一个或多个字符(INLINECODE3feecd9c)。当引擎遇到换行符时,它就停止了匹配,因为默认情况下点号并不匹配换行符。接下来,让我们看看使用 INLINECODE8ec790ae 标志后的代码效果。
Python3
CODEBLOCK_4a6f1d4c
Output:
> <sre.SREMatch object; span=(0, 12), match=‘Hello,
Geeks‘>
多行模式
使用多行模式(INLINECODE957135b1)标志,我们可以让正则表达式针对字符串中每一行的开头和结尾进行匹配。如果我们直接看 INLINECODE83dc9481 符号,在默认情况下它只匹配整个字符串的开头。因此,即使换行符之后有符合条件的字符,它也无法匹配并返回 None。让我们通过下面的代码来具体了解一下。
Python3
CODEBLOCK_7df1f98d
Output
None
通过使用多行标志,我们可以解决这个问题。它让 INLINECODEb43b102b 和 INLINECODE1e3054d7 能够匹配字符串中每一行的开头和结尾。让我们再次尝试匹配字符串中某行的开头。
Python3
CODEBLOCK_3c372d25
Output
详细模式
这个标志允许我们以更易读的方式来书写正则表达式。让我们看看下面的代码示例。
Python3
CODEBLOCK_0ada7e4b
Output
详细模式会将 # 字符视为注释符号,并且会忽略所有的空白字符,包括换行符。这让复杂的正则表达式变得清晰明了。
调试模式
re.DEBUG 标志可以在编译正则表达式时提供调试信息。让我们看看下面的代码示例。
Python3
CODEBLOCK_1e6be387
Output
SUBPATTERN 1 0 0
MAX_REPEAT 2 2
IN
CATEGORY CATEGORY_DIGIT
LITERAL 45
SUBPATTERN 2 0 0
MAX_REPEAT 3 3
IN
CATEGORY CATEGORY_DIGIT
在这里,我们看到了不同类型的标志,它们可以微调正则表达式引擎的行为。此外,我们还可以通过按位或(|)运算符同时使用多个标志。