我有一個字符串,它看起來像這樣:在Python正則表達式中,如何忽略捕獲組中的表達式?
<name>-<gender>-<age>.jpg
我想是非常自由的,只要我接受。要求爲:
<name>
組件是必需的。- 必須有
.jpg
文件擴展 - ,則可以留一個組件空白或離開它,只要完全是作爲最終的結果是下面的排列之一:
<name>.jpg
<name>-<gender>.jpg
<name>-<gender>-<age>.jpg
舉例什麼被認爲是有效的:
Beamin-M.jpg
Jean.jpg
Maria-F-23.jpg
我想打破使用正則表達式字符串的每個組成部分,但我不想要捕捉的破折號(-
)。我嘗試使用非捕獲組,但沒能得到我想要的結果:
>>> import re
>>> r = re.compile(r'([^\-]*)((?:\-)[^\-]*)?((?:\-)[^\-]*)?\.jpg')
>>> for d in (
... 'Beamin-M.jpg',
... 'Jean.jpg',
... 'Maria-F-23.jpg',
...):
... print r.match(d).groups()
...
('Beamin', '-M', None)
('Jean', None, None)
('Maria', '-F', '-23')
有沒有人有什麼建議?
我同意。編寫正則表達式時可能會犯錯,直到很晚纔會意識到它。正則表達式需要大量正面和負面的單元測試來確保一切正確。我投票給你指出這一點。 – varunl
很好的答案。什麼時候不回答確切問題的完美例子值得綠色檢查。 –