我有一个字符串,它看起来像这样:在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
很好的答案。什么时候不回答确切问题的完美例子值得绿色检查。 –