无法用regex转义反斜杠?

2024-04-20 10:57:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用下面的正则表达式

^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$

我知道它很难看,但到目前为止,它的作用并不像我认为应该的那样是反斜杠,因为它是转义的,所以我也尝试了\\,而不是\\\,但结果是一样的。有什么想法吗?


Tags: 斜杠zaz0
3条回答

反斜杠\是正则表达式的转义字符。因此,双反斜杠实际上意味着单反斜杠。

\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.

参考号:http://www.regular-expressions.info/reference.html

如果将其放入程序中的一个字符串中,实际上可能需要使用四个反斜杠(因为当为字符串对其进行“反转义”时,字符串解析器将删除其中的两个,然后正则表达式需要两个反斜杠进行转义)。

例如:

regex("\\\\")

被解释为。。。

regex("\\" [escaped backslash] followed by "\\" [escaped backslash])

被解释为。。。

regex(\\)

被解释为与单个反斜杠匹配的正则表达式。


根据语言的不同,您可能可以使用不同形式的引号,不解析转义序列,以避免使用相同数量的引号—例如,在Python中:

re.compile(r'\\')

引号前面的r使它成为一个不解析反斜杠转义的raw字符串。

如果不是文本,则必须使用\\\\,这样就可以得到\\,这意味着一个转义反斜杠。

那是因为有两种说法。在regex的字符串表示中,有"\\\\",这就是发送给解析器的内容。解析器将看到\\,它将其解释为有效的转义反斜杠(与单个反斜杠匹配)。

相关问题 更多 >