转义 Python 中的所有元字符
Escape all metacharacters in Python
我需要搜索可能有很多元字符的模式。目前我使用长正则表达式。
prodObjMatcher=re.compile(r"""^(?P<nodeName>[\w\/\:\[\]\<\>\@$]+)""", re.S|re.M|re.I|re.X)
(我的实际模式很长所以我只是粘贴了一些我需要帮助的相关部分)
当我需要在一次重新编译中编写这些模式的组合时,这尤其痛苦。
有没有pythonic的方法来缩短模式长度?
看,你的模式可以简化为
r"""^(?P<nodeName>[]\w/:[<>@$]+).*?"""
请注意,您不必转义字符 classes 中的任何非单词字符,除了 shorthand classes、^
、-
、]
和 \
。有一些方法可以使字符 class 中的那些(\
除外)不转义:
]
字符开头class
-
在字符 class 的 start/end
^
- 仅当将其作为文字符号放在字符 class 的开头时才应转义。
字符class外,必须转义\
、[
、(
、)
、+
、$
, ^
, *
, ?
, .
.
请注意 /
不是 Python 正则表达式模式中的特殊正则表达式元字符,因此不必转义。
在定义正则表达式模式时使用原始字符串文字以避免出现问题(例如混淆单词边界 r'\b'
和退格 '\b'
)。
我需要搜索可能有很多元字符的模式。目前我使用长正则表达式。
prodObjMatcher=re.compile(r"""^(?P<nodeName>[\w\/\:\[\]\<\>\@$]+)""", re.S|re.M|re.I|re.X)
(我的实际模式很长所以我只是粘贴了一些我需要帮助的相关部分)
当我需要在一次重新编译中编写这些模式的组合时,这尤其痛苦。
有没有pythonic的方法来缩短模式长度?
看,你的模式可以简化为
r"""^(?P<nodeName>[]\w/:[<>@$]+).*?"""
请注意,您不必转义字符 classes 中的任何非单词字符,除了 shorthand classes、^
、-
、]
和 \
。有一些方法可以使字符 class 中的那些(\
除外)不转义:
]
字符开头class-
在字符 class 的 start/end
^
- 仅当将其作为文字符号放在字符 class 的开头时才应转义。
字符class外,必须转义\
、[
、(
、)
、+
、$
, ^
, *
, ?
, .
.
请注意 /
不是 Python 正则表达式模式中的特殊正则表达式元字符,因此不必转义。
在定义正则表达式模式时使用原始字符串文字以避免出现问题(例如混淆单词边界 r'\b'
和退格 '\b'
)。