0

我正在尝试通过大量文本(位于变量整体中)搜索单词“he”,然后将其替换为“she”,然后我想再次搜索文本并将“she”替换为 he。但是下面的常规表达式相互覆盖 - 这意味着在此示例中,文本将全部为“他”

我的问题 - 有没有组合正则表达式并一次完成这两项操作?

#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)

非常感谢您的帮助。

4

2 回答 2

1

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

Ifrepl是一个函数,每次出现不重叠的模式时都会调用它。该函数采用单个匹配对象参数,并返回替换字符串。

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'
于 2012-12-08T21:53:11.007 回答
0

好吧,这不是一次性的,但一种选择是采取不同的路线。您可以使用中间替换,例如:-

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

这将解决您的问题。

于 2012-12-08T21:47:02.063 回答