带可选组的Python正则表达式,至少匹配一个

2024-04-24 20:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我想我可以快点重新匹配()与我给定的字符串,但我卡住了。你知道吗

使用给定的字符串列表

  • 时间是12小时3米12秒
  • 时间是3米12秒
  • 它是12小时3米
  • 12秒后准备好
  • 时间是6小时

我想把它分成3组,H,M和S

(?: (\d{1,2})H)?

(?: (\d{1,2})M)?

(?: (\d{1,2})S)?

很容易我就可以按组(1-3)访问H、M和S组件。我只是想限制匹配来满足这个信条,至少有一个optionl组必须被触发,否则就不匹配了。否则这个表达式可以选择为空,并且匹配所有内容,我猜。你知道吗

下面是该示例的链接: https://regex101.com/r/LKAKbx/5

我怎样才能从match中得到分组的数字,例如:

The Time is 12H 3M 12S

group(1) = 12, group(2) = 3, group(3) = 12

或者

Ready in 12S

group(1) = None, group(2) = None, group(3) = 12


Tags: 字符串httpsnone示例内容列表表达式链接
1条回答
网友
1楼 · 发布于 2024-04-24 20:27:16

使用积极的前瞻性来确保至少有HMS中的一个。你知道吗

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)

相关问题 更多 >