使用正则表达式删除字符串中的数字

时间:2019-06-17 18:42:10

标签: python

在Python中使用re替换字符串中包含占位符的数字,包括小数和百分比

def remove_numbers(text):
    remove = re.sub(r"\W\d\S*", " [DD]", text,)
    return remove

该函数在此示例字符串上正常工作。 sample =“我可以给您100,000的10%。事情增加了10%,所以现在的价格是12.25欧元。 但是,如果字符串以数字开头,则第一个数字不会被占位符代替。

5 个答案:

答案 0 :(得分:1)

因此遍历replace方法似乎是最简单的方法。

def remove_numbers(text):
    nums = '123456787980'
    for i in nums:
        text = text.replace(i, '[DD]')

    return text

答案 1 :(得分:0)

\ W需要有一个字符,因此当您尝试使用数字开头时,它看起来就像\ d \ S *。

match word boundaries中使用'\ b'而不是'\ w':

def remove_numbers(text):
    remove = re.sub(r"\b\d\S*", "[DD]", text,)
    return remove

或者,保持更多原始代码的精神:

def remove_numbers(text):
    remove = re.sub(r"(\s|^)\d\S*", r"\1[DD]", text,)
    return remove

如果要同时匹配多个数字,请使用\ d +代替\ d。

答案 2 :(得分:0)

执行以下操作:

import re
def remove_numbers(text):
    remove = re.sub(r"\W?\d\S*", " [DD]", text,)
    return remove.strip()

print(remove_numbers())

?表示先前模式的0个或多个

答案 3 :(得分:0)

\W在字符串的开头将不匹配。看来您正在使用\W来确保要替换的数字不是单词的一部分。这是有道理的。但是,\W与字符串开头不匹配。您可以使用\A。但是,在字符串开头进行替换时,您可能不想添加空格。可以在单个正则表达式中完成此操作,但如果您分两步执行,我认为它会使代码更易于阅读。

import re

def remove_numbers(text):
    # replace internal numbers that are not a part of a word (adds a space)
    remove = re.sub(r"\W\d\S*", " [DD]", text,)
    # replace number at start of string (if any) (does not add a space)
    remove = re.sub(r"\A\d\S*", "[DD]", remove,)
    return remove

a = "3 foxes jumped over 3 fences"
b = remove_numbers(a)

print("before <{}>".format(a))
print("after <{}>".format(b))

答案 4 :(得分:0)

将您的正则表达式更改为:

    remove = re.sub("^\d+\s|\s\d+\s|\s\d+$", " [DD] ", text)

所有代码:

import re
def remove_numbers(text):
    s = re.sub("^\d+\s|\s\d+\s|\s\d+$", " [DD] ", text)

    return s

t1 = "3 foxes jumped over 3 fences"
print (remove_numbers(t1))

输出:

[DD] foxes jumped over [DD] fences