如何从字符串中提取数字而忽略数字字母混合

时间:2016-03-13 23:41:57

标签: python regex

例如,以下正则表达式从字符串中提取所有“非数字”

re.sub(r"\b[0-9]+\b", "", "5 1 inch c5 bolts 10")
'  inch c5 bolts '

我该怎么做?也就是说,如何提取数字'5 1 10'? (注意:c5不是数字,因此不应包含在结果中)

2 个答案:

答案 0 :(得分:5)

看起来你已经知道了单词边界......你只是在找一个单词边界,一串数字(只有数字)然后是另一个单词边界。正则表达式为\b\d+\b

>>> re.findall(r'\b\d+\b', "5 1 inch c5 bolts 10")
['5', '1', '10']

答案 1 :(得分:1)

由于您只是在寻找非负整数,因此您可以使用str.isdigit方法在没有正则表达式的情况下执行此操作。

s = "5 1 inch c5 bolts 10"
a = [u for u in s.split() if u.isdigit()]
print(a)
b = ' '.join(a)
print(repr(b))

<强>输出

['5', '1', '10']
'5 1 10'

如果你真的想要一个数字列表作为整数,你可以像这样修改列表理解:

a = [int(u) for u in s.split() if u.isdigit()]
print(a)

<强>输出

[5, 1, 10]