re.escape 函数的作用与使用方法
re.escape(string)
函数可以用于转义正则表达式中需要转义的字符,返回对字符串进行转义后的字符串。在使用正则表达式时,若字符串中的一些字符需要转义,使用该函数可以避免手工输入确保正则表达式的正确性。
import re
# 普通的正则匹配
pattern = re.compile('^.*?\[(.*?)\].*?$')
string = '2022-01-01 [新年寄语] 晚安!'
match = pattern.match(string)
print(match.group(1)) # 输出"新年寄语"
# 使用re.escape转义特殊字符
pattern_escaped = re.compile('^.*?' + re.escape('[') + '(.*?)' + re.escape(']') + '.*?$')
match_escaped = pattern_escaped.match(string)
print(match_escaped.group(1)) # 输出"新年寄语"
MULTILINE 函数的作用与使用方法
MULTILINE
是re模块中一个非常常见的标记,它用于指定正则表达式中的 ^
和 $
符号的匹配方式。若要让该标记生效,需要在调用compile函数时加上re.MULTILINE参数。
- 若没有该标记:当编译正则表达式时不设置多行模式,并且正则中以"^"或"$"匹配开头或结尾的字串默认只匹配开头或结尾。
- 若有该标记MULTILINE:$和^分别匹配行尾和行首,其效果类似于设置了re.compile(/^/m)和re.compile(/$/m)的效果。
import re
# 编译多行模式正则表达式并匹配
pattern = re.compile('^(.*)$', re.MULTILINE)
string = 'Line 1\nLine 2\nLine 3\n'
match = pattern.findall(string)
print(match) # 输出['Line 1', 'Line 2', 'Line 3']
# 普通模式下且不设置 MULTILINE 标记的正则表达式匹配
pattern_no_multiline = re.compile('^.*$')
match_no_multiline = pattern_no_multiline.findall(string)
print(match_no_multiline) # ['Line 1']
实例
匹配Markdown格式中的代码块
import re
# 用于匹配Markdown格式中的代码块
block_pattern = re.compile(re.escape('```') + '(.*?)' + re.escape('```'), re.DOTALL)
string = '''Markdown文本内容:这是其中的一些代码块:
import module_name
class ClassName:
def init(self):
self.name = 'a'
def print_name(self):
print(self.name)
print('Hello World!')
'''
match = block_pattern.findall(string)
print(match[0]) # 输出匹配到的代码块
使用 MULTILINE 标记在字符串开头匹配所有的大写字母
import re
# 使用MULTILINE标记匹配字符串开头的所有大写字母
uppercase_pattern = re.compile('^([A-Z]+)', re.MULTILINE)
string = '''ABC
abc
DEF
def
GHI
jkl'''
match = uppercase_pattern.findall(string)
print(match) # 输出匹配到的结果 ['ABC', 'DEF', 'GHI']
参考资料
- Python re.escape():正则中需要转义的字符串处理
- Python re.MULTILINE:匹配多行文本