在Python中用正则表达式替换多个项

在Python中用正则表达式替换多个项,python,regex,string,replace,Python,Regex,String,Replace,我有一个文本文件,其中包含我要修改的某些字符串序列。例如,在下面的字符串中,我想用一个唯一的字符串替换foo和bar(新的字符串将基于最初匹配的内容,因此我不会事先知道它) 我使用regex查找需要根据实际文本中的分隔方式进行更改的组。如果我只使用re.findAll(),那么在修改匹配的组后,我就不再有用于重建字符串的字符串中单词的位置 在分别修改每个匹配项时,是否有办法保留单词在字符串中的位置?选项1 对于复杂的场景,我建议这样做。下面是一个带有re.sub和lambda回调的解决方案: I

我有一个文本文件,其中包含我要修改的某些字符串序列。例如,在下面的字符串中,我想用一个唯一的字符串替换foo和bar(新的字符串将基于最初匹配的内容,因此我不会事先知道它)

我使用regex查找需要根据实际文本中的分隔方式进行更改的组。如果我只使用re.findAll(),那么在修改匹配的组后,我就不再有用于重建字符串的字符串中单词的位置


在分别修改每个匹配项时,是否有办法保留单词在字符串中的位置?

选项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'

在发布这篇文章之后,我意识到我可能可以在re.findAll()之后使用str.replace(),但由于我已经键入了它,我想知道是否有人有更好的方法。是否有理由不使用
re.sub
?如果搜索字符串是硬代码字符串,并且在匹配字符串时没有上下文可解释,使用链式
replace
方法。@asongtoruin我将替换的内容取决于我在匹配过程中找到的内容。我不知道要提前替换什么。在“选项1”中,对于新的替换,任何函数都可以使用lambda x:吗?@digitaLink。
In [2]: text.replace('foo', 'fooNew').replace('bar', 'bar_replaced')
Out[2]: 'fooNew text text bar_replaced text'