繁体   English   中英

使用 python re.sub,但它替换了意外的开始和结束

[英]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 中的任何单个字符匹配。 但是,这在您的特定场景中提出了两个问题:

  1. 你有一个要匹配的两个字符长的模式\\
  2. 您已经用*对其进行了量化,这意味着“零个或多个匹配项” - 在其核心,您的模式现在基本上可以匹配任何内容,因为您声明的这个字符 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM