匹配包含分隔格式的特定字符串的文件名

时间:2014-04-09 10:29:41

标签: python python-3.x

我创建了一个程序来备份PostgreSQL数据库。每个文件/备份的名称如下:

prefix + database_name + creation_date + suffix

用户编辑prefix(可选)和database_namecreation_date是备份的日期,suffix可以是.dump, .bz2,.gz或.zip。

现在的问题是程序必须让用户有机会删除一个特定数据库的每个备份,这就是,我必须找到名称中包含database_name的每个文件/备份。

但我必须考虑到数据库的名称可能是,例如,'01',如果prefixcreation_date有'01',这可能是个大问题...因此,我不能只检查database_name是否在文件名中。

有什么想法解决这个问题吗?我绞尽脑汁但我不知道。

1 个答案:

答案 0 :(得分:1)

您需要将字符串拆分为其部分;正则表达式可以帮助解决这个问题。

例如:

import re
regex = re.compile(r"^([^_]*)_(.*)_(\d{8}_\d{6}_[^_]+\.(?:dump|bz2|gz|zip))$")

然后,您可以检查第二组是否与查询匹配:

>>> regex.search("prefix_dbname_20140409_115239_CEST.dump").groups()
('prefix', 'dbname', '20140409_115239_CEST.dump')

因此,如果regex.search(myfile).groups()[1]包含您的搜索字符串,则可以删除myfile

<强>解释

^                      # Start of string
([^_]*)                # Group 1 (prefix): Any number of characters except _
_                      # _
(.*)                   # Group 2 (dbname): Any number of characters
_                      # _
(                      # Group 3 (timestamp/extension):
 \d{8}_\d{6}           # Date_Time
 _[^_]+                # _Timezone
 \.(?:dump|bz2|gz|zip) # .Extension
)                      # End of group 3
$                      # End of string