我有一个文本文件,其中包含我想要修改的某些字符串序列。例如,在以下字符串中,我想用一个唯一的字符串替换foo和bar(新字符串将基于最初匹配的字符串,所以我不会事先知道它。)
Original: foo text text bar text
Replaced: fooNew text text bar_replaced text
我正在使用正则表达式来查找我需要根据它们在实际文本中的分隔方式进行更改的组。如果我只使用re.findAll(),在修改匹配的组后,我不再拥有字符串中单词的位置来重建字符串。
有没有办法在单独修改每个匹配时保留字符串中单词的位置?
答案 0 :(得分:2)
选项1
我会为复杂的场景推荐这个。这是一个re.sub
和lambda回调的解决方案:
In [1]: re.sub('foo|bar', lambda x: 'fooNew' if x.group() == 'foo' else 'bar_replaced', text)
Out[1]: 'fooNew text text bar_replaced text'
选项2
更简单一点,如果你有硬编码字符串,可以使用str.replace
进行替换:
In [2]: text.replace('foo', 'fooNew').replace('bar', 'bar_replaced')
Out[2]: 'fooNew text text bar_replaced text'