我有一个看起来像这样的字符串:
<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')
有没有人有什么建议?