簡體   English   中英

Python正則表達式從模板中提取子字符串

[英]Python regular expression extract sub-strings from template

在 Python 中,我正在尋找一種方法來提取給定字符串和匹配模板模式的正則表達式組,例如:

file_path = "/101-001-015_fg01/4312x2156/101-001-015_fg01.0001.exr"
file_template = "/{CODE}_{ELEMENT}/{WIDTH}x{HEIGHT}/{CODE}_{ELEMENT}.{FRAME}.exr"

我正在尋找的輸出如下:

{
    "CODE": "101-001-015",
    "ELEMENT": "fg01",
    "WIDTH": "4312",
    "HEIGHT: "2156",
    "FRAME": "0001"
}

我最初的方法是格式化我的模板並找到所有匹配項,但這並不理想:

import re
re_format = file_template.format(SHOT='(.*)', ELEMENT='(.*)', WIDTH='(.*)', HEIGHT='(.*)', FRAME='(.*)')
search = re.compile(re_format)
result = search.findall(file_path)
# result: [('101-001-015', 'fg01', '4312', '2156', '101-001-015', 'fg01.000', '')]

所有模板鍵都可以包含各種字符並具有各種長度,因此我正在尋找一種好的匹配算法。 任何想法是否以及如何使用 Python re 或任何替代庫來完成?

謝謝!

我會去命名捕獲組並使用groupdict()函數提取所需的結果:

import re

file_path = "/101-001-015_fg01/4312x2156/101-001-015_fg01.0001.exr"
rx = r"\/(?P<CODE>.+)_(?P<ELEMENT>.+)\/(?P<WIDTH>.+)x(?P<HEIGHT>.+)\/.+\.(?P<FRAME>\w+).exr"
m = re.match(rx, file_path)

result = m.groupdict()
# {'CODE': '101-001-015', 'ELEMENT': 'fg01', 'WIDTH': '4312', 'HEIGHT': '2156', 'FRAME': '0001'}

有點像Simon所做的,我也會嘗試使用命名的捕獲組

import re
regex = r"(?P<CODE>[0-9-]+)_(?P<ELEMENT>[0-9a-z]+)\/(?P<WIDTH>[0-9]+)x(?P<HEIGHT>[0-9]+)\/\1_\2\.(?P<FRAME>[0-9]+)\.exr"
test_str = "101-001-015_fg01/4312x2156/101-001-015_fg01.0001.exr"
matches = re.match(regex, test_str)
print(matches.groupdict())

演示: https : //rextester.com/BEZH21139

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM