我有奇怪的项目列表和这样的列表与|
作为分隔符和{{ }}
作为括号。它看起来像这样:正则表达式来匹配特殊列表项目二
| item1 | item2 | item3 | {{Ulist1 | item4 | item5 | {{Ulist2 | item6 | item7 }} | item8 }} | item9 | {{list3 | item10 | item11 | item12 }} | item13 | item14
我想用正则表达式来匹配列表称为Ulist*
(项目4-8)项目,并与Uitem*
替换它们。结果应该是这样的:
更新:
我想一个解决方案根据this question,但从问题的答案是不行的,如果有一个Ulist
内list
。它是在Python 2.7,特别是我的代码是:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import regex
def repl(m):
return "".join([x.replace("item", "Uitem") if x.startswith("{{Ulist") else x for x in regex.split(r'\{{2}(?=(\blist\d*))[^\}]*(?:}(?!})[^\}]*)*}}', m.group(0))])
text = "| item1 | item2 | item3 | {{Ulist1 | item4 | item5 | {{Ulist2 | item6 | item7 }} | item8 | {{list4 | item15 | item16 }} | item17 }} | item9 | {{list3 | item10 | item11 | item12 }} | item13 | item14"
rex = r'(\{\{(?=(Ulist\d*))(?>[^}{]|}(?!})|\{(?!\{)|(?1))*}})'
text = regex.sub(rex, repl, text)
print(text)
你可能会发现使用除正则表达式之外的东西更容易一些......它通常不会适用于任意嵌套的结构。 – glibdud
我也这么认为,但我不知道如何。有人已经用一些链接回答了这个问题,如何在没有正则表达式的情况下以编程方式来完成它,但他删除了他的答案:/ – aleskva
@AlexKupil正如我可以看到这个被删除的答案,[这里是链接](http://stackoverflow.com/ (546433/regular-expression-to-match-outer-brackets)),如果它可以帮助的话。 – zessx