2
def text_process(text):  
    text = text.translate(str.maketrans('', '', string.punctuation))
    return " ".join(text)

输入文本:'交易价值是 - RS.3456.63'

输出:'交易价值为 RS 345663'

有人可以建议我如何在文本预处理期间删除特殊字符(包括 '.' )但保留十进制数字吗?

所需输出:'交易价值为 RS 3456.63'

4

2 回答 2

3

您可以使用更通用的正则表达式来替换除 .

import re
def text_process(text):  
    text = re.sub('[^\w.]+', ' ', text)
    return text

s = 'Transaction: value* #was - 3456.63 Rupees'
text_process(s)

你得到

'Transaction value was 3456.63 Rupees'

编辑:以下函数仅返回带小数的数字。

def text_process(text):  
    text = re.sub('[^\d.]+', '', text)
    return text

s = 'Transaction: value* #was - 3456.63 Rupees'
text_process(s)

'3456.63'
于 2019-09-16T17:43:12.860 回答
1

如果我正确理解了您的问题,则此代码适合您:

text = 'Transaction value was, - 3456.63 Rupees'

regex = r"(?<!\d)[" + string.punctuation + "](?!\d)"
result = re.sub(regex, "", text)
# output: 'Transaction value was  3456.63 Rupees'

要解决您的第二个问题,请尝试使用此技巧:

text = 'Transaction value was, - Rs.3456.63'

regex_space = r"([0-9]+(\.[0-9]+)?)"
regex_punct = r'[^\w.]+'

re.sub(r'[^\w.]+', ' ', re.sub(regex_space,r" \1 ", text).strip())
# output: 'Transaction value was Rs. 3456.63 Rupees'
于 2019-09-16T17:27:46.977 回答