<p>元字符是正则表达式中具有特殊功能的符号,如. ^ $ * + ? { } [ ] | ( ),需用反斜杠转义才能匹配字面值;Python中需双反斜杠或原生字符串,re.escape()可自动转义非字母数字字符。</p>

元字符在正则表达式中不是普通字符,而是有特殊功能的符号,比如 . 匹配任意非换行字符、^ 表示行首、$ 表示行尾、[ ] 定义字符集、- 在字符组内表示范围。想让它们按字面意思匹配(比如就匹配一个点号或左方括号),就得用反斜杠 转义。
哪些字符是元字符?
常见元字符包括:. ^ $ * + ? { } [ ] | ( )。它们在正则中不表示自身,而是控制匹配逻辑。例如:
-
file.txt中的.若不转义,会匹配任意单个字符,导致匹配到fileAtxt或file#txt -
price[0-9]中的[和]若不转义,会被当作字符组起止符,实际想匹配的是字面的方括号 -
123+456中的+是量词(匹配前一元素一次或多次),若要匹配加号本身,必须写成+
怎么正确转义?
在正则表达式里,给元字符前加 就能取消其特殊含义。但要注意:Python 字符串本身也解析反斜杠,所以代码中需写两个反斜杠 \,或者用原生字符串 r"" 避免双重转义。
- 匹配字面句点:
r"file.txt"或"file\.txt" - 匹配字面方括号:
r"price[0-9]"或"price\[0-9\]" - 匹配字面反斜杠本身:
r"c:\temp\"(结尾双反斜杠因 Windows 路径习惯)或"c:\\temp\\"
字符组 [ ] 里的特殊规则
在方括号内部,部分元字符失去作用,但 ^、-、] 仍有特殊行为,需特别注意位置:
-
^放在开头表示“否定”,如[^abc]匹配非 a/b/c 的字符;想匹配字面^,把它放在非开头位置,如[ab^c] -
-放在开头或结尾时是字面横线,如[-abc]或[abc-];放在中间才表示范围,如[a-z] -
]必须放在开头(紧接[后)才能作为字面字符,如[]abc]匹配]、a、b、c中任一;否则会被误认为字符组结束符
省力又安全的转义方式
当你要匹配一段含多个元字符的字符串(比如 URL、文件名、SQL 片段),手动逐个转义容易遗漏。Python 的 re.escape() 函数能自动处理:
-
re.escape("https://example.com?x=1&y=2")返回https\://example\.com\?x\=1\&y\=2 - 结果可直接拼入正则模式,确保所有特殊字符都被转义,适合动态构建正则
- 注意:它会转义所有非字母数字字符,包括你可能希望保留功能的(如
^或$),所以只用于“纯字面匹配”场景

















