您可以使用Python re
訪問重複捕獲,你不需要明確解開量化組,使第二部分可選:
(\d+):(\d+)(?:-(\d+):(\d+))? (.*)
^^^^^^^^^^^^^^^^^
見regex demo
Python demo:
import re
rx = r"(\d+):(\d+)(?:-(\d+):(\d+))? (.*)"
strs = ["12:30 Test", "12:30-12:50 Test"]
for str in strs:
m = re.search(rx, str)
if m:
print(m.groups())
輸出:
('12', '30', None, None, 'Test')
('12', '30', '12', '50', 'Test')
隨着PyPi regex
,您可以訪問所有的captures
,看到你的正則表達式的例子:
>>> import regex
>>> strs = ["12:30 Test", "12:30-12:50 Test"]
>>> for str in strs:
m = regex.search(r'((\d+):(\d+)-?)+ (.*)', str)
if m:
print(m.captures(1))
print(m.captures(2))
print(m.captures(3))
['12:30']
['12']
['30']
['12:30-', '12:50']
['12', '12']
['30', '50']
>>>