在python正则表达式MatchObject中编辑组内容

时间:2011-09-21 10:32:16

标签: python regex django

我有以下(简化)代码 - 这是我想要做的事情的本质

def replace_todo(m):
    m[2] = '*' if value else ' '
    return m.group()

我想编辑匹配对象中的特定组,然后渲染整个匹配项,包括已编辑的部分。

使用

在每次匹配时调用replace_todo函数
myCompiledRegex.sub(replace_todo, text)

用作输入的文本是

[ ] mah lalalalalaa
[*] mah lalalalalaa

预期产出

[*] mah lalalalalaa
[*] mah lalalalalaa

正则表达式看起来像这样

^(\[( |\*)]) ([a-z][a-z][a-z]) (.*)$

但似乎我不允许编辑匹配对象

当我尝试执行上面的代码时,我得到以下TypeError

_sre.SRE_Match' object does not support item assignment

提前致谢:)

编辑:

使用spicavigo解决方案,将列表转换为字符串(str(groups))时这就是它的外观

[u’[ ]’, '*’, u’jsp’, u’do something’]

它应该是这样看的

[*] jsp do something

1 个答案:

答案 0 :(得分:2)

对于正则表达式我是新手但你最初不能接受m.groups(),改变你想要的任何东西,然后返回变量?

说:

x=list(m.groups()) #NOTE: groups and not group
x[2] = '*' if value else ' '
return x

修改

也许现在我得到了你想要达到的目标。如下面的评论中所述,您可以将正则表达式更改为

'^(\[)( |\*)(]) ([a-z][a-z][a-z]) (.*)$'

这基本上是为了帮助加入列表m.groups()