我有一个特殊的用例,但我还不知道如何处理。我想根据字段名/字段长度拆分字符串。为此,我定义了一个正则表达式,如下所示:
'(?P<%s>.{%d})' % (field_name, field_length)
这个操作将重复应用于所有字段。
我还有一个正则表达式,可以删除每个字段右侧的空格:
self.re_remove_spaces = re.compile(' *$')
这样我就可以像这样获取每个字段:
def dissect(self, str):
data = { }
m = self.compiled.search(str)
for field_name in self.fields:
value = m.group_name(field_name)
value = re.sub(self.re_remove_spaces, '', value)
data[field_name] = value
return data
我必须对数百万个字符串执行此处理,因此它必须高效。
令我困扰的是,我更喜欢使用compiled.sub
而不是compiled.search
一次性进行解析+空格去除,但我不知道如何做到这一点。
具体来说,我的问题是:
如何在Python正则表达式中结合命名组执行正则表达式替换?
'(?<%s>.%d)' % ...
,可能会变成类似'(?<name>.12)'
)不是有效的Python正则表达式。 - interjay