阅读re.escape()
文档,它说
在3.3版更改:'_'字符不再转义。
在3.7版更改:只有在正则表达式中具有特殊含义的字符才会被转义。结果,"!"、" ;', '%', & "" ;, ',', '/', ':', ';', '& lt ;', '=', '& gt;"、"@","">
问题是,为什么#
字符仍然转义?
当使用re.X
/re.VERBOSE
选项时,#
字符变得特殊(与任何文字空白一样)。
检查下面的代码片段:
import re
pattern = "# Something"
text = "Here is # Something"
print( re.search(pattern, text ) )
# => <re.Match object; span=(8, 19), match='# Something'>
print( re.search(pattern, text, re.X ) )
# => <re.Match object; span=(0, 0), match=''>
查看Python演示。
当使用re.search(pattern, text, re.X )
时,没有匹配,因为# Something
被解析为注释,#
标记单行注释开始,在它之后直到换行符的所有文本在模式中被忽略。
因此,re.escape
转义#
,然后当使用re.X
/re.VERBOSE
时,它被视为字面值字符:
print( re.search(re.escape(pattern), text, re.X ) )
# => <re.Match object; span=(8, 19), match='# Something'>