python - 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']
解决方案
正则表达式仅捕获括号内的内容()
。因此,您必须将整个正则表达式放入其中:
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})'
如果您愿意,也可以将其缩短为。
推荐阅读
- css - 使用 Bootstrap 4 将搜索栏移动到中等屏幕的第二行
- python - Pyinstaller Error Bundling Egg Files FileNotFoundError: [Errno 2] No such file or directory
- angular - Angular Material Flex Layout - 居中对齐菜单按钮
- sitecore - 如何重定向主页及其在 Sitecore 上的子页面?
- swift - 快速编程。SKPhysicscontact 可能存在的问题
- matlab - 使用 fprintf() 和 disp() 函数在 MATLAB 中向命令窗口显示消息?
- java - 将此 lambda 替换为方法引用
- python - 将字典中的多个值(每个键)映射并附加到数据框的不同列
- java - Ant JUnit 任务因 ClosedByInterruptException 而失败
- python - 循环求和查找和多重