一个字符串 string_a 中可能有反斜杠 \ 这个字符,用 re.sub()过滤掉它,为什么要打三个反斜杠 \\\
才行呢?
这个 \ 到底谁在转义谁呀
re.sub('[\\\]', 'repl', string_a)
1
noe132 2017-09-22 13:47:29 +08:00 via Android
我想到了 JavaScript 的正则构造函数,如果要匹配 /得打 4 个
new RegExp('////') |
2
noe132 2017-09-22 13:47:50 +08:00 via Android
斜杠打反了。。。
|
3
charove 2017-09-22 13:48:43 +08:00
bash [[]]也很反人类啊。
|
4
rogerchen 2017-09-22 14:13:14 +08:00
善用 raw string,'[\\\]' --> r'\\',话说我很难理解为什么要用 '[]' 去把 \ 装起来
|
5
rogwan OP |
6
hahastudio 2017-09-22 14:39:05 +08:00 2
你确定不应该是 '[\\\\]' 么
'[\\\]' 对应了 4 个字符,[ 是 [,\\ 是 \,\] 是 \] 因为 python 在 escape 的时候,\ 后面接的字符不是有效的需转义的字符的话,\ 会被正常返回,所以 >>> print '\]' \] >>> '[\\\]' == '[\\\\]' True >>> print '[\\\\]' [\\] 至于为什么要两个 \,因为在 regex 里,想要表达字面 \ 需要转义 |
7
rogwan OP @hahastudio 我上面的回复里修正了,标准的应该是 4 个,只是写三个好像现在的新解释器输出结果是一样的。
|
8
Cooky 2017-09-22 14:47:24 +08:00 via Android
尽量用 raw string,不然自己看都费尽
|
9
Osk 2017-09-22 14:56:50 +08:00 via Android
为什么不用 raw string...
|