正则表达式:如何将 re.sub 与可变数量的元素一起使用?
Regex: how to use re.sub with variable number of elements?
我正在尝试用 "x or y" 替换文本语料库中的 {x;y} 模式,除了元素的数量是可变的,所以有时会有 3 个或更多元素,即 {x; y;z}(最大值为 9)。
我正在尝试使用正则表达式执行此操作,但我不确定如何执行此操作以便我可以根据存在的元素数量进行替换。所以我的意思是,如果我使用带有可变组件的正则表达式,如下所示
part = '(;[\w\s]+)'
regex = '\(([\w\s]+);([\w\s]+){}?\)'.format(part)
re.sub(regex,/1 or /2 or /3, text)
当大括号中只有 2 个元素时,我有时会得到额外的 'or'(如果我增加可变元素的数量,还会得到更多),这是我不想要的。另一种方法是用不同数量的可变部分多次执行此操作,但代码会非常笨重。我想知道是否有任何方法可以使用正则表达式方法实现此目的?将不胜感激。
我正在使用 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)
输出:
There goes my cat or dog playing in the street or garden.
我正在尝试用 "x or y" 替换文本语料库中的 {x;y} 模式,除了元素的数量是可变的,所以有时会有 3 个或更多元素,即 {x; y;z}(最大值为 9)。
我正在尝试使用正则表达式执行此操作,但我不确定如何执行此操作以便我可以根据存在的元素数量进行替换。所以我的意思是,如果我使用带有可变组件的正则表达式,如下所示
part = '(;[\w\s]+)'
regex = '\(([\w\s]+);([\w\s]+){}?\)'.format(part)
re.sub(regex,/1 or /2 or /3, text)
当大括号中只有 2 个元素时,我有时会得到额外的 'or'(如果我增加可变元素的数量,还会得到更多),这是我不想要的。另一种方法是用不同数量的可变部分多次执行此操作,但代码会非常笨重。我想知道是否有任何方法可以使用正则表达式方法实现此目的?将不胜感激。
我正在使用 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)
输出:
There goes my cat or dog playing in the street or garden.