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

Python 使用正则表达式删除数字字符串,python,regex,Python,Regex,我试图删除字符串中的所有数字,只要数字以“、”grams“、”g“、”kg”或“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|$kilog

我试图删除字符串中的所有数字,只要数字以“、”grams“、”g“、”kg”或“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

方括号
[…]
和美元符号
$
的含义与您认为的不同。你需要:

test = sub("\d+\s(g|grams|kg|kilograms)"," ",test)
[\sg |$grams |$kg |$kg]
的意思是“一个空白字符(
\s
),或这些字符中的任何一个:
g |$grams |$kg |$kg
”;因此,
[\sg$grams.$kg.$kg.$kg]
相当于
[\s$agiklomrs]
,大致相当于
(\s\$a | g | i | k | l | o | m | r | s)


$
的意思是“仅当这是字符串的末尾时才匹配”。

您的正则表达式没有捕获您要查找的内容。方括号
[]
表示定义字符类,因此
[\sg |$…]
不是您想要的。你应该试试:

test = sub("\d+(\s|g|grams|kg|kilograms)", " ", test)
在这里,我们首先用
\d+
表示数字,然后用括号
()
进行分组,并将所有可能的后缀放在其中,用
|
分隔

要获得您指定的输出,我们还需要更改一些内容。替换字符串应该是
,而不是
,并且我们需要能够通过将
\s?
附加到正则表达式中,在末尾获得额外的空间

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

需要
\d+\.?\d*
来计算十进制数
您希望订单为
grams | g
,以免留下rams

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:
“使用1a和and的测试。”

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

test2
“用1a和kg、g和g进行测试。”

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