Python 使用正则表达式删除数字字符串
我试图删除字符串中的所有数字,只要数字以“、”grams“、”g“、”kg”或“kg”结尾 我使用的是正则表达式,但它不会删除任何数字出了什么问题? 比如,;字符串“abc 1231g kjsjk jkdsfkjdkj 11kg”应生成“abc kjsjk jkdsfkjdkj” 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
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)