Python 正则表达式匹配或运算符
- 2025-02-18 09:24:00
- admin 原创
- 30
问题描述:
我正在尝试匹配 AM 或 PM 的时间格式。
i.e. 02:40PM
12:29AM
我正在使用以下正则表达式
timePattern = re.compile('d{2}:d{2}(AM|PM)')
但它始终只返回AM
PM
字符串,没有数字。出了什么问题?
解决方案 1:
使用非捕获组(?:
并引用匹配组。
用于re.I
不区分大小写的匹配。
import re
def find_t(text):
return re.search(r'd{2}:d{2}(?:am|pm)', text, re.I).group()
您还可以使用它re.findall()
进行递归匹配。
def find_t(text):
return re.findall(r'd{2}:d{2}(?:am|pm)', text, re.I)
看demo
解决方案 2:
使用非分隔的捕获组(?:...)
:
>>> from re import findall
>>> mystr = """
... 02:40PM
... 12:29AM
... """
>>> findall("d{2}:d{2}(?:AM|PM)", mystr)
['02:40PM', '12:29AM']
>>>
另外,您可以将正则表达式缩短为dd:dd(?:A|P)M
。
解决方案 3:
听起来您正在访问组 1,但您需要访问组 0。
正则表达式中的组如下:
d{2}:d{2}(AM|PM)
|-----| - group 1
|----------------| - group 0 (always the match of the entire pattern)
您可以通过以下方式观看整场比赛:
timePattern.match('02:40PM').group(0)
解决方案 4:
您没有捕获小时、分钟字段:
>>> import re
>>> r = re.compile('(d{2}:d{2}(?:AM|PM))')
>>> r.search('02:40PM').group()
'02:40PM'
>>> r.search('Time is 12:29AM').group()
'12:29AM'
解决方案 5:
您是否意外地抓取了第一个集群(与括号中的模式部分匹配的内容)而不是“第 0 个”集群(即整个匹配)?
相关推荐
热门文章
项目管理软件有哪些?
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
热门标签
云禅道AD