Python 正则表达式,匹配连续反斜杠,应该是用 2 个\\,还是 4 个\\\\ 这样?

2021-02-23 13:09:53 +08:00
 miniyao

原字符串:

str = 'A\B\\C\\\D\\\\E'

把原字符串中的反斜杠,全部改成逗号 ,

out1 = re.sub(r'[\\]', ', ', str)
out2 = re.sub(r'[\\\\]', ', ', str)

out1 和 out2 输出结果是一样的,看到有不一样的用法,哪个是更规范的匹配方式?

2365 次点击
所在节点    Python
8 条回复
xuboying
2021-02-23 13:12:32 +08:00
正则语法方括号里重复多个的内容不是和写一个是一个意思么,这个和 python 没关系吧?
no1xsyzy
2021-02-23 13:23:21 +08:00
首先你要搞懂正则的语法
然后你要搞懂正则没有 “更规范的匹配方式”

在解释这个问题时,建议你拿个显示正则的 AST 的工具看一下。

[\\] ~ (any-of \x1c)
[\\\\] ~ (any-of \x1c \x1c)
DOLLOR
2021-02-23 13:59:20 +08:00
正则语法方括号里的每个字符是独立的,比如[abc]匹配的是"a"、"b"、"c",而不是连续的"abc"字符串。所以,你在方括号里无论写几个\,它都是匹配一个\,意义都是一样的。
julyclyde
2021-02-23 15:34:00 +08:00
raw string 试试?就不需要 escape 了吧
RIcter
2021-02-23 15:37:30 +08:00
[] 的问题,参见 #3

re.sub(r'\\\\', ', ', str) -> 'A\\B\\C, D, E'
0clickjacking0
2021-02-23 16:28:55 +08:00
楼主的意思是每一个\都要替换成逗号吗
loli
2021-02-23 17:39:28 +08:00
为什么要加[]?
后面没{}单纯一个[]有什么意义吗?
imlinhanchao
2021-02-24 09:25:05 +08:00
re.sub(r'\\+', ', ', str)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/755420

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX