我创建了一个程序来备份PostgreSQL数据库。每个文件/备份的名称如下:
prefix + database_name + creation_date + suffix
用户编辑prefix
(可选)和database_name
,creation_date
是备份的日期,suffix
可以是.dump, .bz2,.gz或.zip。
现在的问题是程序必须让用户有机会删除一个特定数据库的每个备份,这就是,我必须找到名称中包含database_name
的每个文件/备份。
但我必须考虑到数据库的名称可能是,例如,'01',如果prefix
或creation_date
有'01',这可能是个大问题...因此,我不能只检查database_name
是否在文件名中。
有什么想法解决这个问题吗?我绞尽脑汁但我不知道。
答案 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