我试图用正则表达式过滤字符串列表,如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(^
)锚定确保字符串中不允许有其他字符。