【发布时间】:2017-12-04 21:20:32
【问题描述】:
我一直在尝试编写一个正则表达式,它将返回版本化文件的基本名称,但也会返回同一列表中非版本化文件的基本名称。
import re
file_list = [
"ThisFile_v01.ext",
"ThisFile_v02.ext",
"ThatFile_v01.ext",
"ThatFile_v02.ext",
"NonVersionedFile.ext",
"Non_VersionedFile.ext",
]
r = re.compile(r"^(?P<basename>.*(?!_v))(?P<version>_v\d+\.)?(?(version).*$|\..*$)")
for f in file_list:
match = r.match(f)
print(match.group('basename'))
我正在尝试返回这样的列表:
ThisFile
ThisFile
ThatFile
ThatFile
NonVersionedFile
Non_VersionedFile
我目前得到这个:
ThisFile_v01
ThisFile_v02
ThatFile_v01
ThatFile_v02
NonVersionedFile
Non_VersionedFile
我可能想多了,但我已经经历了很多次迭代,我似乎无法弄清楚这一点。任何帮助将不胜感激。
【问题讨论】:
标签: python regex regex-negation regex-lookarounds regex-group