Python Regex:如何使用元素数量可变的re.sub?

Python Regex:如何使用元素数量可变的re.sub?,python,regex,python-3.x,python-3.5,Python,Regex,Python 3.x,Python 3.5,我试图用“x或y”替换文本语料库中的{x;y}模式,只是元素的数量是可变的,所以有时会有3个或更多的元素,即{x;y;z}(最大值为9) 我正试图用正则表达式来实现这一点,但我不确定如何做到这一点,以便根据当前元素的数量进行替换。我的意思是,如果我使用一个正则表达式和一个变量组件,如下所示 part='(;[\w\s]+)' 正则表达式='\([\w\s]+);([\w\s]+){}?\)。格式(部分) 关于sub(regex,/1或/2或/3,文本) 当大括号中只有2个元素时,我有时会得到一个

我试图用“x或y”替换文本语料库中的{x;y}模式,只是元素的数量是可变的,所以有时会有3个或更多的元素,即{x;y;z}(最大值为9)

我正试图用正则表达式来实现这一点,但我不确定如何做到这一点,以便根据当前元素的数量进行替换。我的意思是,如果我使用一个正则表达式和一个变量组件,如下所示

part='(;[\w\s]+)'
正则表达式='\([\w\s]+);([\w\s]+){}?\)。格式(部分)
关于sub(regex,/1或/2或/3,文本)

当大括号中只有2个元素时,我有时会得到一个额外的“或”(如果我增加变量元素的数量,会得到更多),这是我不想要的。另一种方法是使用不同数量的可变部分多次执行此操作,但代码将非常笨拙。我想知道是否有任何方法可以通过正则表达式方法实现这一点?如果您有任何想法,我将不胜感激


我将python3.5与spyder一起使用。

对于常规的搜索和替换操作来说,该场景有点太多了,因此我建议传入一个函数来动态生成替换字符串

import re

text = 'There goes my {cat;dog} playing in the {street;garden}.'

def replacer(m):
    return m.group(1).replace(';', ' or ')

output = re.sub(r'\{((\w;?)*\w)\}', replacer, text)

print(output)
输出:

我的猫或狗在街上或花园里玩耍


{x或y}
替换
{x;y}
可以接受吗?还是必须是
x或y
(不带大括号)?我的目的是也拆下大括号