首页 > 解决方案 > 组合两个具有不同分组要求的正则表达式

问题描述

我有两个不同的重复字符替换规则,我想将它们组合成一个正则表达式。

我可以在 python 3.x 中做到这一点:

import re
s = r'http://www.google.com/search=ooo-eeee-aa-ii-uuuu'
aiu=re.compile(r'(([aiu])\2{1,})')
eo=re.compile(r'(([eo])\2{2,})')
eo.sub(r'\2',aiu.sub(r'\2',s))

如果有一个主要的性能提升(这个操作将被应用数百万次),是否有一个单一的正则表达式可以实现这两个实现的目标(不必像我上面那样嵌套调用)。

标签: pythonregex

解决方案


您可以将这两个替换与交替模式结合起来。替换字符串可以同时存在\1\2因为其中一个是空的并且无论如何都不会影响输出。

aeiou = re.compile(r'([aiu])\1{1,}|([eo])\2{2,}')
aeiou.sub(r'\1\2', s)

推荐阅读