python re.sub - 替代替换模式

时间:2016-06-12 17:07:59

标签: python regex python-3.x

我想为re.sub。

提供替代替代模式

让我们说我有两种搜索模式作为替代方案,例如:

re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string)

而不是提供一个替换模式我想以某种方式捕获哪个搜索模式替代匹配并提供替代替换模式。 这可能吗? 感谢。

PS。这里的代码细节是无关紧要的,这是一个普遍的问题。

2 个答案:

答案 0 :(得分:1)

您可以将功能传递给re.sub()。在该功能中,您可以根据捕获的组返回所需的值。一个简单的插图代码:

>>> def fun(m):
...   if m:
...     if m.group(1):
...        return 'x'
...     else:
...        return 'y'


>>>print re.sub(r"([A-Z]+)|([a-z]+)", fun , "ab")

函数fun()检查匹配是否成功,并根据捕获的组返回替换字符串。如果匹配[A-Z]+,则x是替换字符串,其他[a-z]+已匹配且y是替换字符串。

有关详细信息:doc

答案 1 :(得分:1)

通常,您只需使用两个替代品:

re.sub(r"[A-Z]+", replacement1, string)
re.sub(r"[a-z]+", replacement2, string)

Anticlimactic,对吧?

它实际上比通常的替代品更少的代码,并且它更清楚你正在做什么。