Skip to main content
 首页 » 编程设计

python之如何更改除这两个字符之外的所有字符

2025年05月04日14Leo_wl

假设我们有一个字符串:

a = "I would like to go to dinner." 

很容易将字符串中的所有i和o更改为-。如果我们定义:

b = re.sub("i|o","-", a, flags = re.I) 

我们得到:

b = "- w-uld l-ke t- g- t- d-nner." 

但是我不知道怎么得到:

"I -o--- -i-- -o -o -o -i-----" 

以优雅的方式使用 RE 模块(注意 b 中的最后一个 - 是通过替换点获得的)。一个人可以写

c = "" 
for char in a: 
    c += char if char.lower() in "io" else "-" 

但我想用 RE 来做到这一点。我试着写类似的东西

c =  re.sub('(?!i|o)', a, flags = re.I) 

但这会导致

"I- -wo-u-l-d- -li-k-e- -to- -go- -to- -di-n-n-e-r-.-" 

我也不知道为什么。显然,我不明白 (?!...) 是如何工作的。

请您参考如下方法:

您只需要指定一组您不想匹配的字符:

>>> re.sub("[^io ]", "-", a, flags=re.I) 
'I -o--- -i-- -o -o -o -i-----' 

这里,除了"i"、"o" 和"" 之外的所有字符都被替换为连字符(忽略大小写)。将字符放在以 ^ 符号为前缀的组中意味着这些字符将从匹配中省略。