2016-06-12 130 views
1

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

比方说,我有两个搜索模式的替代品,像这样:

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

和,而不是提供一个替换模式,我想以某种方式赶上它的搜索模式可选项被匹配并提供可供选择的替代模式。 这可能吗? 谢谢。

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

+0

是的。阅读正则表达式文档。你正在寻找捕获括号。 – spectras

+1

我知道搜索模式中的分组选项,然后在替换模式中使用\数字引用。我想要做的是:如果group \ 1匹配,则将字符串替换为'a',如果group \ 2则替换为'b'。 – user2965473

回答

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

+0

这是完美的,谢谢! – user2965473

0

通常情况下,你只使用两个替代:

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

虎头蛇尾的,对不对?

它实际上比其他代码更少的代码,它更清楚你正在做什么。