使用Regex删除数字字符串

时间:2012-03-29 22:39:14

标签: python regex

我试图删除字符串中的所有数字,只要数字以“”,“克”,“g”,“kg”或“千克”结尾。

我正在使用正则表达式,但它没有删除任何数字。 出了什么问题?

例如;字符串"abc 1231g kjsjk jkdsfkjdkj 11kg"应该生成"abc kjsjk jkdsfkjdkj "

Python代码:

from re import sub
test = "abc 1231g kjsjk jkdsfkjdkj 11kg"
test = sub("[\d]+[\sg|$grams|$kg|$kilograms]$"," ",test)
print test # every number is still there

3 个答案:

答案 0 :(得分:1)

方括号[...]和美元符号$并不代表您的想法。你需要:

test = sub("\d+\s(g|grams|kg|kilograms)"," ",test)

[\sg|$grams|$kg|$kilograms]的含义是“空格字符(\s)或任何这些字符:g|$grams|$kg|$kilograms”;因此[\sg|$grams|$kg|$kilograms]相当于[\s$agiklomrs],大致相当于(\s|\$|a|g|i|k|l|o|m|r|s)

$的含义是“只有在字符串的最后才匹配”。

答案 1 :(得分:1)

您的正则表达式无法捕捉您正在寻找的内容。方括号[]表示定义一个字符类,因此[\sg|$...]不是您想要的。你应该试试:

test = sub("\d+(\s|g|grams|kg|kilograms)", " ", test)

在这里,我们从数字\d+开始,然后使用括号()进行分组,并将所有可能的后缀放入其中,以|分隔。

要获得您指定的输出,我们需要更改一些内容。替换字符串应为""而不是" ",我们需要通过将\s?附加到正则表达式来最后获取额外的空格。

test = sub("\d+(\s|g|grams|kg|kilograms)\s?", "", test)

答案 2 :(得分:0)

将需要

\d+\.?\d*来计算十进制数;
并且你会希望订单为grams|g,因为它不会让你留下公羊。

import re
test = "A test with 1a and 123 and 129kg and 80.5g and 5grams."
test2 = re.sub("\d+\.?\d*(\s|grams|g|kg|kilograms)\s?", "", test)

test2: 'A test with 1a and and and and .'

问题可能意味着您只想删除数字(留下后缀),
在这种情况下,您可以使用正向前瞻断言(?=...)

test2 = re.sub("\d+\.?\d*(?=\s|grams|g|kg|kilograms)\s?", "", test)

test2 'A test with 1a and and kg and g and grams.'