gpt4 book ai didi

python - 匹配特殊列表项的正则表达式 II

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:13 25 4
gpt4 key购买 nike

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

| item1 | item2 | item3 | {{Ulist1 | item4 | item5 | {{Ulist2 | item6 | item7 }} | item8 }} | item9 | {{list3 | item10 | item11 | item12 }} | item13 | item14

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

| item1 | item2 | item3 | {{Ulist1 | Uitem4 | Uitem5 | {{Ulist2 | Uitem6 | Uitem7 }} | Uitem8 }} | item9 | {{list3 | item10 | item11 | item12 }} | item13 | item14

更新:

我根据 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)

最佳答案

也许这可以让你开始:

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 的堆栈中以确定何时它应该正在转换。它假定分隔符周围的空格不重要。

关于python - 匹配特殊列表项的正则表达式 II,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34923554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com