开发者社区> 问答> 正文

无法理解python中pattern.findall()的执行

在Python中天真,在学习Python模块时,我发现了一些奇怪的东西(我无法得到):

import re

pattern = re.compile(r'[0-9]{3}-[0-9]{3}-[0-9]{4}')
list_phoneNumbers = pattern.findall('phone number : 123-456-7894, my home number : 789-456-1235')
print(list_phoneNumbers)

pattern = re.compile(r'bat(wo)?man')
batman_match = pattern.search('batman is there')
batwoman_match = pattern.search('batwoman is there')
bat_list_all = pattern.findall('batman is there but not batwoman')

print(batman_match.group())
print(batwoman_match.group())
print(bat_list_all)

输出:

['123-456-7894', '789-456-1235']
batman
batwoman
['', 'wo']

为什么print(bat_list_all)却没有给出列表['batman','batwoman']?我不明白为什么?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 23:29:52 1161 0
1 条回答
写回答
取消 提交回答
  • 这是因为您正在使用群组(wo)?sofindall返回与该组匹配的内容:

    • ` '' ` for ` batman `
    • ` 'wo' ` for ` batwoman `

    您可以使用不匹配组pattern = re.compile(r'bat(?:wo)?man')

    *

    re.findall():以字符串列表形式返回字符串中所有不重复的模式匹配项。从左到右扫描字符串,并以找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回一个组列表;如果模式包含多个组,则这将是一个元组列表。空匹配项包含在结果中。

    回答来源:stackoverflow

    2020-03-24 23:30:00
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载