python re.sub - 替代替换模式
python re.sub - alternative replacement patterns
我想为 re.sub 提供替代替换模式。
假设我有两种搜索模式可供选择,如下所示:
re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string)
而不是提供一种替换模式,我想以某种方式捕获匹配的搜索模式替代并提供替代替换模式。
这可能吗?
谢谢
PS。这里的代码细节无关紧要,这是一个普遍的问题。
您可以将函数传递给 re.sub()
。在函数中,您可以根据捕获的组 return 所需的值。一个简单的代码说明:
>>> 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()
检查匹配是否成功,并根据捕获的组,return替换字符串。如果 [A-Z]+
匹配,x
是替换字符串,否则 [a-z]+
匹配,y
是替换字符串。
更多信息:doc
通常,您只需使用两个替换项:
re.sub(r"[A-Z]+", replacement1, string)
re.sub(r"[a-z]+", replacement2, string)
虎头蛇尾,对吧?
它实际上比通常的替代方案代码更少,而且你在做什么更清楚。
我想为 re.sub 提供替代替换模式。
假设我有两种搜索模式可供选择,如下所示:
re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string)
而不是提供一种替换模式,我想以某种方式捕获匹配的搜索模式替代并提供替代替换模式。 这可能吗? 谢谢
PS。这里的代码细节无关紧要,这是一个普遍的问题。
您可以将函数传递给 re.sub()
。在函数中,您可以根据捕获的组 return 所需的值。一个简单的代码说明:
>>> 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()
检查匹配是否成功,并根据捕获的组,return替换字符串。如果 [A-Z]+
匹配,x
是替换字符串,否则 [a-z]+
匹配,y
是替换字符串。
更多信息:doc
通常,您只需使用两个替换项:
re.sub(r"[A-Z]+", replacement1, string)
re.sub(r"[a-z]+", replacement2, string)
虎头蛇尾,对吧?
它实际上比通常的替代方案代码更少,而且你在做什么更清楚。