我有以下(简化)代码 - 这是我想要做的事情的本质
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
答案 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()