簡體   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