在Python中使用re替换字符串中包含占位符的数字,包括小数和百分比
def remove_numbers(text):
remove = re.sub(r"\W\d\S*", " [DD]", text,)
return remove
该函数在此示例字符串上正常工作。 sample =“我可以给您100,000的10%。事情增加了10%,所以现在的价格是12.25欧元。 但是,如果字符串以数字开头,则第一个数字不会被占位符代替。
答案 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