我有一个特殊的用例,我还不知道如何覆盖。我想根据field_name/field_length剖析一个字符串。为此,我定义了这样一个正则表达式:用python正则表达式解析字符串,使用命名组和替换
'(?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)'%...',它会变成类似''(? .12)'')不是有效的Python正则表达式。 –
interjay
2012-03-12 10:10:12
对不起,已更正:缺少P和{}。我仍在测试这个,所以可能会出现更多的错误。 – dangonfast 2012-03-12 10:14:58