我在制作与包含可能包含可选子字符串的文件名匹配的Python正则表达式时遇到了一些麻烦。我要匹配的不同类型文件名的代表性示例:
ABC.log
A1C_0001.log
A1C_DEF_0001.log
A1C_DEF_GHI_0001.log
我需要能够检索以下组的值(如果存在):
NUMBER:如果存在,则是\.log
之前的四个数字
NAME:\.log
或_(?P<NUMBER>[0-9]{4})\.log
之前的任何内容
因此,对于我之前的示例:
ABC.log => NAME: ABC ; GROUP: None
A1C_0001.log => NAME: A1C ; GROUP: 0001
A1C_DEF_0001.log => NAME: A1C_DEF ; GROUP: 0001
A1C_DEF_GHI_0001.log => NAME: A1C_DEF_GHI ; GROUP: 0001
我认为^(?P<NAME>.*)(_(?P<NUMBER>[0-9]{4})|)\.log$
可以解决问题,但是使用此正则表达式NUMBER可以包含在NAME中。由于NAME可以包含下划线和数字,所以我不知道该尝试什么,尽管我觉得这并不难。
我要避免的是必须使用类似^(?P<NAME1>.*)_(?P<NUMBER>[0-9]{4})|(?P<NAME2>.*)\.log$
的东西。有什么想法吗?