python - 带有可选组的 Python 正则表达式,至少匹配一个
问题描述
所以我想我可以用给定的字符串快速地做一个 re.match() ,但我被卡住了。
使用给定的字符串列表
- 时间是 12H 3M 12S
- 时间是 3M 12S
- 12H 3M
- 12S 准备好
- 时间是 6H
我想提取成3组H,M和S,不知何故
(?: (\d{1,2})H)?
(?: (\d{1,2})M)?
(?: (\d{1,2})S)?
Easyliy 然后我可以按组(1-3)访问 H、M 和 S 组件。我只是想限制匹配以实现标准,即必须触发至少一个选项组,否则它不匹配。否则,我猜这个表达式可以选择为空并且匹配所有内容。
这是示例的链接: https ://regex101.com/r/LKAKbx/5
如何仅从匹配组中获取数字,例如:
时间是 12H 3M 12S
组(1)= 12,组(2)= 3,组(3)= 12
或者
12S 准备好
组 (1) = 无,组 (2) = 无,组 (3) = 12
解决方案
使用积极的前瞻来确保我们至少有一个H
,M
或S
。
import re
strings = [
'The Time is 12H 3M 12S',
'The Time is 3M 12S',
'It is 12H 3M',
'Ready in 12S',
'The Time is 6H',
]
for s in strings:
res = re.search(r'(?= \d{1,2}[HMS])(?: (\d{1,2})H)?(?: (\d{1,2})M)?(?: (\d{1,2})S)?', s)
# here __^^^^^^^^^^^^^^^^^
print(res.groups())
输出:
('12', '3', '12')
(None, '3', '12')
('12', '3', None)
(None, None, '12')
('6', None, None)
推荐阅读
- python - String field comparison and print the differences
- ruby - How to define a negated description for a custom matcher
- android - Error occuring on successful firebase authentication login
- reactjs - React native version updating not working
- while-loop - while statement in Lua in correct way
- c# - 更新数据时出现 SQL 错误 - 事务(进程 ID)已死锁
- fluentd - 如何在无网络上安装 fluentd 插件(离线)
- python - NiFi:如果失败,则以有限的尝试运行 ExecuteStreamCommand 处理器
- asp.net-core - ServiceStack ServiceStack.Auth.OrmLiteAuthRepository
- filter - 两个 R 代码应该做同样的事情(至少在我的脑海里),有什么不同?