2017-08-04 67 views
1

我有一個文本文件,其中包含某些我想要修改的字符串序列。例如,在下面的字符串中,我想用一個唯一字符串替換foo和bar(新字符串將基於最初匹配的內容,所以我不會在手之前知道它)。用Python中的正則表達式替換多個項目

Original: foo text text bar text 
Replaced: fooNew text text bar_replaced text 

我正在使用正則表達式找到我需要改變的組,根據它們在實際文本中如何分隔。如果我只是使用re.findAll(),那麼在修改匹配的組之後,我不再需要字符串中單詞的位置來重建字符串。

有沒有一種方法可以在修改每個匹配時分別保留字符串中單詞的位置?

+0

發佈後,我意識到我可以在re.findAll()之後使用str.replace(),但是因爲我已經輸入了它,所以我想知道我如果有人有更好的方法。 – digitaLink

+0

有沒有理由不使用're.sub'? – asongtoruin

+0

如果搜索字符串是硬編碼字符串,並且在匹配字符串時沒有上下文來說明,請使用鏈接的替換方法。 –

回答

2

選項1

我會推薦這複雜的場景。下面是與re.sub的解決方案和拉姆達回調:

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' 
+0

在「選項1」中,可以使用lambda x之後的任何函數:用於新替換? – digitaLink

+0

@digitaLink正確。 –