2

我想为 re.sub 提供替代替换模式。

假设我有两种搜索模式作为替代方案,如下所示:

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

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

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

4

2 回答 2

2

您可以将函数传递给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是替换字符串。

欲了解更多信息:文档

于 2016-06-12T18:29:43.330 回答
2

通常,您只需使用两个替换项:

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

虎头蛇尾,对吧?

它实际上比通常的替代方案更少的代码,而且你在做什么更清楚。

于 2016-06-12T20:01:52.623 回答