我试图用正则表达式过滤字符串列表,如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']

最佳答案

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

^[0-9]+$

或者更简单地说:
^\d+$

这将匹配一个或多个数字。start(a2)和end(^)锚定确保字符串中不允许有其他字符。

07-25 23:55
查看更多