[英]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.