Python正则表达式来过滤字符串列表

时间:2013-12-22 21:02:19

标签: python regex

我正在尝试使用正则表达式过滤字符串列表,如this answer所示。但是代码会产生意想不到的结果:

In [123]: r = re.compile('[0-9]*')
In [124]: string_list = ['123', 'a', '467','a2_2','322','21']
In [125]: filter(r.match, string_list)
Out[125]: ['123', 'a', '467', 'a2_2', '322_2', '21']

我希望输出为['123', '467', '21']

2 个答案:

答案 0 :(得分:18)

问题是您的模式包含*,量词,将匹配或更多位数。因此,即使字符串根本不包含数字,它也会匹配模式。此外,您的模式将匹配输入字符串中出现的位数,这意味着a2仍然是有效匹配,因为包含数字。

尝试使用此模式

^[0-9]+$

或更简单:

^\d+$

这将匹配一个或多个数字。开始(^)和结束($)锚点确保字符串中不允许其他字符。

答案 1 :(得分:8)

这里真的需要Regex吗?你有str.isdigit

>>> string_list = ['123', 'a', '467','a2_2','322','21']
>>> [x for x in string_list if x.isdigit()]
['123', '467', '322', '21']
>>>