📜  用于调整正则表达式行为的Python标志

📅  最后修改于: 2022-05-13 01:54:45.636000             🧑  作者: Mango

用于调整正则表达式行为的Python标志

Python提供了一些标志来修改正则表达式引擎的行为。让我们在下面讨论它们:

  1. 不区分大小写
  2. 点匹配换行符
  3. 多行模式
  4. 详细模式
  5. 调试模式

不区分大小写

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)

输出:

多行模式

使用 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 (|)运算符同时使用多个标志。