簡體   English   中英

帶有可選組的 Python 正則表達式,至少匹配一個

[英]Python regex with optional Groups, one match at least

所以我想我可以用我給定的字符串快速地做一個 re.match() ,但我被卡住了。

使用給定的字符串列表

  • 時間是12H 3M 12S
  • 時間是3M 12S
  • 12H 3M
  • 12 秒內准備就緒
  • 時間是6H

我想提取到 3 組 H、M 和 S,不知何故

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

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

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

然后我可以輕松地按組(1-3)訪問 H、M 和 S 組件。 我只是想限制匹配以實現 creteria,至少必須觸發一個 optionl 組,否則它不匹配。 否則,我猜這個表達式可以選擇為空並匹配所有內容。

這是示例的鏈接: https : //regex101.com/r/LKAKbx/5

我怎樣才能從比賽中以組的形式獲取數字,例如:

時間是12H 3M 12S

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

或者

12 秒內准備就緒

組(1) = 無,組(2) = 無,組(3) = 12

使用積極的前瞻來確保我們至少有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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM