[英]Using python re.sub, but it replace the start and end unexpected
我有这个字符串a = "a:b/c\\"
我想将: / \\
替换为_
一起
这是我的代码
b = re.sub(r'[:/\\]*', '_', a)
但是,结果是''_a__b__c__''
我认为应该是a_b_c_
但是这种方法将开始和结束一起替换,我该如何更改呢?
a = "a:b/c\\"
b = re.sub(r'[:/\\]*', '_', a)
print(b)
您使用的字符 class []
与该 class 中的任何单个字符匹配。 但是,这在您的特定场景中提出了两个问题:
\\
*
对其进行了量化,这意味着“零个或多个匹配项” - 在其核心,您的模式现在基本上可以匹配任何内容,因为您声明的这个字符 class 现在实际上是可选的。 这里的解决方案是 (a) 使用组和替代项而不是字符 class,以及 (b) 消除误用的*
量词:
import re
a = "a:b/c\\"
b = re.sub(r'(:|/|\\)', '_', a)
print(b) # 'a_b_c_'
Regex101 - 这略有不同,因为该工具本身不尊重原始r''
字符串 Python 用于消除对 escaping 反斜杠\
字符的需要,无论它从根本上说明了这里发生的事情。
我已将re.sub(r'[:|/|\\]*', '_', a)
更改为re.sub(r'[:|/|\\]+', '_', a)
这个问题解决了,+ 表示它需要存在 1 个或多个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.