开发者社区> 问答> 正文

re模块中的Findall()没有给我与搜索相同的结果

因此,我尝试获取带或不带区号的电话号码列表(假装电话号码为9位数字)

import re

def message_6():
    phone_regex = re.compile(r'(\d\d\d-)?\d\d\d-\d\d\d')
    mo = phone_regex.findall("Call me at 966-123-412 or 237-128")
    print(mo)

message_6()

但是我得到的列表是['966-','']我希望它输出像这样的列表['966-123-412','237-128']

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 21:31:09 445 0
1 条回答
写回答
取消 提交回答
  • 正则表达式仅捕获括号()中的内容。因此,您必须将整个正则表达式放入其中:

    import re
    
    def message_6():
        phone_regex = re.compile(r'(\d\d\d-)?\d\d\d-\d\d\d')
        mo = phone_regex.findall("Call me at 966-123-412 or 237-128")
        print(mo)
    
    message_6()
    

    但随后返回两个值的元组。 为什么? 那是因为您有两个捕获组。一个代表整数,另一个代表可选部分。因此,您可以在捕获组的开头插入?:来忽略它。

    import re
    
    def message_6():
        phone_regex = re.compile(r'((?:\d\d\d-)?\d\d\d-\d\d\d)')
        mo = phone_regex.findall("Call me at 966-123-412 or 237-128")
        print(mo)
    
    message_6()
    

    可以根据需要工作。

    如果需要,也可以将其缩短为r'((?:\ d {3}-){1,2} \ d {3})'

    回答来源:stackoverflow

    2020-03-24 21:31:15
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载