【问题标题】:python - Replace several different characters by only one [duplicate]python - 仅用一个替换几个不同的字符[重复]
【发布时间】:2017-06-27 09:36:49
【问题描述】:

我正在寻找一种将某些字符替换为另一个字符的方法。

例如我们有:

chars_to_be_replaced = "ihgr"

我们希望它们被替换为

new_char = "b"

这样新的字符串

s = "我饿了"

变成

s' = "bm bunbby"。

我很清楚您可以使用 .replace 或使用正则表达式一次处理一个字符,但我正在寻找一种只遍历字符串一次的方法。

re.sub 是否只通过字符串一次?还有其他方法可以做到这一点吗?谢谢

谢谢

【问题讨论】:

  • string.replace() 怎么不适合你?
  • 通过替换,您必须遍历要删除的每个字符的字符串,不是吗?
  • 不,你没有。 import re; re.sub("[ihgr]", "b", "im hungry")
  • 好吧,那不是 .replace()

标签: python regex string replace character


【解决方案1】:

您可以使用string.translate()

from string import maketrans

chars_to_be_replaced = "ihgr"
new_char = "b"
s = "im hungry"

trantab = maketrans(chars_to_be_replaced, new_char * len(chars_to_be_replaced))

print s.translate(trantab)
# bm bunbby

【讨论】:

    【解决方案2】:

    这个怎么样:

    chars_to_be_replaced = "ihgr"
    new_char = "b"
    
    my_dict = {k: new_char for k in chars_to_be_replaced}
    
    s = "im hungry"
    
    new_s = ''.join(my_dict.get(x, x) for x in s)
    print(new_s)  # bm bunbby
    

    ''.join(my_dict.get(x, x) for x in s)对于原始字符串中的每个字母,它会尝试获取它的字典值,除非它不存在,在这种情况下会返回原始字符串。


    注意:您可以通过将 list 传递给 join 而不是生成器来加快(一点)速度:

    new_s = ''.join([my_dict.get(x, x) for x in s])
    

    【讨论】:

    • 我只测试了这个小例子,但它比使用四次替换需要更多时间。需要在更有代表性的例子上使用它
    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 2020-09-14
    • 2011-02-10
    • 1970-01-01
    • 2023-04-03
    • 2012-12-15
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多