如何在Python中用空格替换文本中的特殊字符?

时间:2019-01-05 22:41:11

标签: python regex python-3.x

问题陈述: 如果发现带有字母的特殊字符,则将其替换为一个空格。而且,如果找到带有数字的数字,则只需忽略。

实际情况:

  1. $45
  2. 4.5 inches
  3. Task.This is good.
  4. Hello, How $are you. This is good.

预期方案:

  1. $45
  2. 4.5 inches
  3. Task This is good
  4. Hello How are you This is good

我尝试编写one regex来查找遵循此模式的文本,但不确定如何用空格替换该文本中的特殊字符。

enter image description here

例如,在上图中,预期输出为'ddddd dfhghg''222 d'等。

此方案可以由re.sub(模式,替换,输入)处理吗?如果是,请说明如何:)

2 个答案:

答案 0 :(得分:3)

您可以使用带有负向环绕效果的字符集:

(?<!\d)([.,$])(?!\d) 

将所有应替换的字符放在方括号内:[.,$]

Demo

说明:

  • (?<!\d)后面是负数-确保匹配的字符前没有数字
  • (?!\d)负向查找-确保匹配的字符后没有数字
  • [...]字符集,其中包含您要替换的所有特殊字符

答案 1 :(得分:3)

我会沿着这些思路尝试一些事情,虽然在性能上肯定是次优的,但可以起作用

class Replacer
    def __init__(self, special_chars):
        self.special_chars = special_chars

    def replace(self, s):
        for ch in self.special_chars:
            for match in re.finditer(ch, s):
                if not is_followed_by_numbers(s, match.start())
                    s = replace_at_index(s, match.start())

    def is_followed_by_numbers(self, s, start):
        pass # Provide your implementation

    def replace_at_index(self, s, index):
        pass # Provide your implementation