python - Python re.findall 只返回部分模式
问题描述
我正在编写一个 Python 3 程序来跟踪与客户相处的时间。记录小时数的一种方法是使用字符串Client 9:35am 1:35pm
,例如第一次是开始,第二次是结束。
为了从字符串中提取时间,我使用regex101.com构造了以下模式:
r"[01]?[0-9]:[0-5][0-9]\s*([Aa][Mm]?|[Pp][Mm]?)"
在使用 regex101 对上述示例进行测试时,它正确地将两次识别为两个单独的匹配项。但是,当尝试在 Python 中使用该模式时,re.findall 返回的列表仅包含 AM 或 PM:
re.findall(r"[01]?[0-9]:[0-5][0-9]\s*([Aa][Mm]?|[Pp][Mm]?)", "Client 9:35am 1:35pm")
['am', 'pm']
如何更改此设置以使匹配包含整个时间?
解决方案
使用非捕获组:
r"[01]?[0-9]:[0-5][0-9]\s*(?:[Aa][Mm]?|[Pp][Mm]?)" # not the "?:"
re.findall
如果模式包含捕获组,则返回组列表而不是整个匹配项。
推荐阅读
- android - 转发同意 Facebook Audience Network SDK (GDPR)
- javascript - Chrome 扩展程序:URL 字段中的上下文菜单
- google-api - 我怎么知道为其他谷歌帐户的用户启用了谷歌两因素身份验证?
- php - 通过多个值在多维数组中搜索
- angular - VSCode 在 Angular 项目中找不到路径
- spartacus-storefront - 如何添加我的自定义页面解析器而不是 Spartacus 页面解析器?
- fortran - Fortran 中的非表格数据结构
- javascript - 通过 Nunjucks Templating 在 json 对象中添加数据
- terraform - 本地测试不影响后端
- c# - 如何在不更改 url 的情况下调用 asp.net mvc 操作