我正在破解一个转换文件类型的包,允许用户指定转换(python 函数)和用于更改文件名的正则表达式。
在一种情况下,我有一系列正则表达式和一个输出字符串,我希望通过我所有的正则表达式组的联合来扩展它们:
import re
re_strings = ['(.*).txt', '(.*).ogg', 'another(?P<name>.*)']
regexes = map(re.compile, re_strings]
input_files = ['cats.txt', 'music.ogg', 'anotherpilgrim.xls']
matches = [regexes[i].match(input_files[i]) for i in range(len(regexes))]
outputstr = 'Text file about: \1, audio file about: \2, and another file on \g<name>.'
# should be 'Text file about: cats, audio file about: music, and another file on pilgrim.xls'
我想outputstr
用正则表达式的联合进行扩展(也许连接对\2
参考更有意义?)。我可以连接 re,用一些未使用的字符分隔它们:
final_re = re.compile('\n'.join(re_strings))
final_files = '\n'.join(input_files)
match = final_re.search(final_files)
但这会强制 re 匹配整个文件,而不仅仅是文件名的某些部分。我可以在文件之间放入一个包罗万象的组,(.*?)
但这肯定会弄乱组引用,并且可能会弄乱原始模式(我无法控制)。我想我也可以在任何地方强制命名组,然后合并所有正则表达式 .groupdict()s ...
Python 不允许部分扩展,因此所有组引用都必须有效,因此无论如何都没有机会为 groupdict 进行一系列扩展,例如:
for m in matches:
outputstr = m.expand(outputstr)
感谢您的任何建议!