【问题标题】:How to replace list of chars from the string [duplicate]如何从字符串中替换字符列表[重复]
【发布时间】:2021-03-26 20:07:58
【问题描述】:

我有一个搜索字符串如果搜索中的字符匹配,则替换为无

sear = '!%'
special_characters = ['!', '"', '#', '$', '%','(',')']
for remove_char in special_characters:
   search_value = re.sub(remove_char, '', sear)

我的输出出错了

预期为无

sear = 'ABC!%DEF'
Expected is 'ABCDEF'
sear = 'ABC,DEF'
Expected is 'ABC,DEF'

【问题讨论】:

  • 当我在 print(sear) 之后执行它时,我收到 '!%'。你确定输出吗?
  • 错误:丢失),位置 0 处未终止的子模式
  • 我认为他想打印search_value 而不是sear

标签: python


【解决方案1】:

只需做一个列表理解和''.join:

sear = '!%'
special_characters = ['!', '"', '#', '$', '%']
sear = ''.join([i for i in sear if i not in special_characters])
print(sear)

这段代码逐个字符地迭代字符串,并查看该字符是否不在special_characters列表中,如果不在,则保留它,如果是,则删除它,但这只会给我们一个字符串列表,所以我们需要''.join 把它变成一个字符串。

【讨论】:

    【解决方案2】:

    您可以使用特殊字符创建一个正则表达式字符类,然后使用正则表达式替换来进行替换。对于更长的字符串或更大的特殊字符列表,您应该会发现它的运行速度比列表理解解决方案快 2-3 倍。

    import re
    
    special_characters = ['!', '"', '#', '$', '%','(',')']
    regex = re.compile('[' + ''.join(f'\{c}' for c in special_characters) + ']')
    
    sear = '!%'
    search_value = regex.sub('', sear)
    print(search_value)
    sear = 'ABC!%DEF'
    search_value = regex.sub('', sear)
    print(search_value)
    sear = 'ABC,DEF'
    search_value = regex.sub('', sear)
    print(search_value)
    

    输出:

    <blank line>
    ABCDEF
    ABC,DEF
    

    请注意,我已在字符类中的所有字符前加上 \,这样您就不必担心在字符类中使用具有特殊含义的字符,例如 -]

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 2013-05-18
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 2012-10-05
      相关资源
      最近更新 更多