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

 我无眼泪1221 发布于 2023-02-08 16:05

我试图用正则表达式过滤字符串列表,如本答案所示.但是代码会产生意外结果:

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 个回答
  • 问题是你的模式包含*,quantier,将匹配零个或多个数字.因此,即使字符串根本不包含数字,它也会匹配模式.此外,您的模式将匹配输入字符串中出现的位数,这意味着,a2它仍然是有效匹配,因为它包含一个数字.

    尝试使用此模式

    ^[0-9]+$
    

    或者更简单:

    ^\d+$
    

    这将匹配一个或多个数字.start(^)和end($)锚点确保字符串中不允许其他字符.

    2023-02-08 16:07 回答
  • 这里真的需要正则表达式吗?你有str.isdigit:

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

    2023-02-08 16:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有