问题陈述: 如果发现带有字母的特殊字符,则将其替换为一个空格。而且,如果找到带有数字的数字,则只需忽略。
实际情况:
$45
4.5 inches
Task.This is good.
Hello, How $are you. This is good.
预期方案:
$45
4.5 inches
Task This is good
Hello How are you This is good
我尝试编写one regex来查找遵循此模式的文本,但不确定如何用空格替换该文本中的特殊字符。
例如,在上图中,预期输出为'ddddd dfhghg'
,'222 d'
等。
此方案可以由re.sub(模式,替换,输入)处理吗?如果是,请说明如何:)
答案 0 :(得分:3)
您可以使用带有负向环绕效果的字符集:
(?<!\d)([.,$])(?!\d)
将所有应替换的字符放在方括号内:[.,$]
说明:
(?<!\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