Python中的正则表达式 - 在re.sub中结合两个操作

时间:2012-12-08 21:38:10

标签: regex python-2.7

我试图通过一堆文本(位于变量整体中)搜索单词“he”,然后将其替换为“她” 然后我想再次搜索文本并用他替换“她”。 但是下面的常规exprssions是相互重叠的 - 在这个例子中,文本将全部是“他”

我的问题 - 无论如何组合正则表达式并同时执行两个操作?

#jackNew.heShe() == she
#jillNew.heShe() == he  

whole=re.sub(r'(?i)\bhe\b', jackNew.heShe(), whole)

whole=re.sub(r'(?i)\bshe\b', jillNew.heShe(), whole)
非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您可以利用re.sub(pattern, repl, string, count=0, flags=0)

中的事实
  

如果repl是一个函数,则会针对模式的每个非重叠事件调用它。该函数接受一个匹配对象参数,并返回替换字符串。

import re
s = 'she said he was a nice girl'
re.sub('s?he', lambda m: 'he' if m.group() == 'she' else 'she', s)

给出

'he said she was a nice girl'

答案 1 :(得分:0)

嗯,这不是一蹴而就,但一个选择是采取不同的路线。您可以使用中间替换,例如: -

  • "he"替换为"s@he"
  • "she"替换为"he"
  • "s@he"替换为"she"

这将解决您的问题。