【发布时间】:2022-12-09 05:35:41
【问题描述】:
我有以下参数化文件名的格式。
"{variable}_{domain}_{GCMsource}_{scenario}_{member}_{RCMsource}_{RCMversion}_{frequency}_{start}-{end}_{fid}.nc"
例如
"pr_EUR-11_CNRM-CERFACS-CNRM-CM5_rcp45_r1i1p1_CLMcom-CCLM4-8-17_v1_day_20060101-20101231.nc"
(请注意,{start}-{end} 是连字符分隔而不是下划线)
各个字段始终由下划线分隔,并包含可预测(但可变)的格式。在示例文件名中,我省略了最后的 {fid} 字段,因为我希望它是可选的。
我想在 python 中使用正则表达式来解析这样的文件名,以便给我一个 dict 或类似的格式字符串中字段名称的键以及解析文件名的相应值。例如
{
"variable": "pr",
"domain", "EUR-11",
"GCMsource": "CNRM-CERFACS-CNRM-CM5",
"scenario": "rcp45",
"member": "r1i1p1",
"RCMsource": "CLMcom-CCLM4-8-17",
"RCMversion": "v1",
"frequency": "day",
"start": "20060101",
"end": "20101231".
"fid": None
}
可以根据字段限制每个字段的正则表达式模式。例如
- “域”始终为 3 个字母 - 2 个数字
- “成员”始终是 rWiXpY,其中 W、X 和 Y 是数字。
- “场景”始终包含字母“rcp”,后跟 2 个数字。
- “开始”和“结束”始终为 8 位数字 (YYYYMMDD)
字段中永远不会有下划线,下划线仅用于分隔字段。
请注意,我使用 https://github.com/r1chardj0n3s/parse 取得了一些成功,但我认为它不够灵活,无法满足我的需求(尝试解析具有相似格式的其他相似文件名经常会相互混淆)。
如果答案可以解释一些允许我这样做的正则表达式原则,那就太好了。
【问题讨论】:
-
您是否尝试过自己构建正则表达式? Here 是一个在线正则表达式测试器,可以帮助您学习正则表达式和构建表达式。