首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配特殊列表项目2的要求

匹配特殊列表项目2的要求
EN

Stack Overflow用户
提问于 2016-01-21 12:15:26
回答 1查看 125关注 0票数 2

我有一个奇怪的项目列表和这样的列表,其中|作为分隔符,{{ }}作为括号。看起来是这样的:

代码语言:javascript
复制
| item1 | item2 | item3 | {{Ulist1 | item4 | item5 | {{Ulist2 | item6 | item7 }} | item8 }} | item9 | {{list3 | item10 | item11 | item12 }} | item13 | item14

我希望使用Ulist* (项目4-8)来匹配名为RegEx的列表中的项目,并将它们替换为Uitem*。结果应该如下所示:

代码语言:javascript
复制
| item1 | item2 | item3 | {{Ulist1 | Uitem4 | Uitem5 | {{Ulist2 | Uitem6 | Uitem7 }} | Uitem8 }} | item9 | {{list3 | item10 | item11 | item12 }} | item13 | item14

更新:

我根据这个问题尝试了一个解决方案,但是这个问题的答案不起作用,如果一个Ulist中有一个list。它在Python2.7中,特别是我的代码是:

代码语言:javascript
复制
#!/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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-21 13:56:01

也许这能让你开始:

代码语言:javascript
复制
def parse(data):
    items = [i.strip() for i in data.split('|')]
    newitems = []
    nest = [False]
    for item in items:
        if item.startswith('{{'):
            if item.startswith('{{Ulist'):
                nest.append(True)
            else:
                nest.append(False)
            newitems.append(item)
        else:
            if item.startswith('item') and nest[-1]:
                newitems.append('U' + item)
            else:
                newitems.append(item)
        if item.endswith('}}'):
            nest.pop()
    return ' | '.join(newitems)

基本上,它将分隔符(|)上的数据拆分,并对其执行一个循环,在适当的情况下进行转换,并将状态保存在名为nest的堆栈中,以确定何时应该进行转换。它假定围绕分隔符的空格没有意义。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34923554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档