用于调整正则表达式行为的Python标志
Python提供了一些标志来修改正则表达式引擎的行为。让我们在下面讨论它们:
- 不区分大小写
- 点匹配换行符
- 多行模式
- 详细模式
- 调试模式
不区分大小写
re.IGNORECASE 允许正则表达式不区分大小写。这里,匹配是根据提供的字符串的大小写返回的,而不是正则表达式中的字符串。
Python3
import re
match = re.search(r'geeksforgeeks', 'GeeksforGeeks',re.IGNORECASE)
print(match)
Python3
import re
match = re.search(r'.+', 'Hello,\nGeeks')
print(match)
Python3
import re
match = re.search(r'.+','Hello,\nGeeks', re.DOTALL)
print(match)
Python3
import re
match = re.search(r'^Geeks', 'Hello,\nGeeks')
print(match)
Python3
import re
match = re.search(r'^Geeks', 'Hello,\nGeeks', re.MULTILINE)
print(match)
Python3
import re
match = re.search(r"""(?P[\d]{2}) # The first two digits
- # A literal python
(?P[\d]{3}) # The last three digit
""", '25-542', re.VERBOSE)
print(match)
Python3
import re
match = re.search(r'(?P[\d]{2})-(?P[\d]{3})',\
'25-542', re.DEBUG)
print(match)
<_sre.SRE_Match object; span=(0, 13), match='GeeksforGeeks'>
点匹配换行符
通过使用 re.DOTALL 标志,您可以修改点 (.)字符的行为以匹配除其他字符之外的字符。在使用 DOTALL 标志之前,让我们看看常规引擎如何响应字符。
蟒蛇3
import re
match = re.search(r'.+', 'Hello,\nGeeks')
print(match)
<_sre.SRE_Match object; span=(0, 6), match='Hello,'>
在这里,正则表达式匹配一个或多个字符('.+')。当引擎到达字符时,它会停止,因为点字符与换行符不匹配。让我们看看使用 DOTALL 标志的代码。
蟒蛇3
import re
match = re.search(r'.+','Hello,\nGeeks', re.DOTALL)
print(match)
输出:
<_sre.SRE_Match object; span=(0, 12), match=’Hello,\nGeeks’>
多行模式
使用 Multiline 标志,您可以匹配字符串中任何行的开头和结尾。如果我们查看 ^字符,它只会匹配字符串的开头。所以,即使字符,它也没有返回。让我们看看下面的代码。
蟒蛇3
import re
match = re.search(r'^Geeks', 'Hello,\nGeeks')
print(match)
None
使用 Multiline 标志,您可以克服上述问题。它可以匹配字符串中任何行的开头和结尾。让我们匹配字符串的开头。
蟒蛇3
import re
match = re.search(r'^Geeks', 'Hello,\nGeeks', re.MULTILINE)
print(match)
<_sre.SRE_Match object; span=(7, 12), match='Geeks'>
详细模式
它允许以更易读的方式表示正则表达式。让我们看看下面的代码。
蟒蛇3
import re
match = re.search(r"""(?P[\d]{2}) # The first two digits
- # A literal python
(?P[\d]{3}) # The last three digit
""", '25-542', re.VERBOSE)
print(match)
<_sre.SRE_Match object; span=(0, 6), match='25-542'>
Verbose 标志将 #字符视为注释字符,并忽略包括换行符在内的所有空白字符。
调试模式
re.DEBUG 标志在编译正则表达式时提供调试信息。让我们看看下面的代码。
蟒蛇3
import re
match = re.search(r'(?P[\d]{2})-(?P[\d]{3})',\
'25-542', re.DEBUG)
print(match)
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
<_sre.SRE_Match object; span=(0, 6), match='25-542'>
在这里,您已经看到了可以稍微改变正则表达式引擎行为的不同类型的标志。您还可以通过使用按位 OR (|)运算符同时使用多个标志。