2016-12-03 228 views
-2

我有類似這樣的字符串,但更長的時間:a:'first'[as34ttatgv34tgw34t$'b':'man',a:'second'[sdfg53t3srthhghrs$'b':'woman'字符串正則表達式

我想找到像,a:'first'[SOMETHING1$'b':'SOMETHING2'模式和替換SOMETHING2到但SOMETHING1保持不變

在結果我得到的字符串:

a:'first'[as34ttatgv34tgw34t$'b':'caR',a:'second'[sdfg53t3srthhghrs$'b':'woman' 
+0

你能更好地描述你想識別的模式嗎?我們可以對你想要匹配的模式做出什麼樣的假設? –

+0

我想在字符串中找到a:'first',簡而言之,接下來我要替換這個a的值'b':'first'。 'b'總是落後於模式[SOMETHING $ –

+0

我不明白你到底想要做什麼。 –

回答

1

可以匹配所有b值,並通過使用正回顧後(?<=TEXT)這是在Pytho支持替換它們ñ。

(?<=b\'\:\')[\s\S]*?(?=\') 

(?<=b\'\:\')[\w\s]* 

退房demo

如果b value複雜,有特殊字符,你可以使用這個正則表達式匹配它:如果b值只包含字母數字字符,你可以使用這個正則表達式

下面是使用第二個正則表達式替換這個工作Python:

import re 
text = '''a:'first'[as34ttatgv34tgw34t$'b':'man',a:'second'[sdfg53t3srthhghrs$'b':'woman' 
''' 
find = r"(?<=b\'\:\')[\s\S]*?(?=\')" 
Bvalue = re.findall(find, text) 
text = text.replace(Bvalue[0], 'car', 1) #first b value 
text = text.replace(Bvalue[1], 'chair', 1) #second b value 
print text 

輸出:

a:'first'[as34ttatgv34tgw34t$'b':'car',a:'second'[sdfg53t3srthhghrs$'b':'chair' 

的Python demo

正如你可以在上面的Python中看到的,你所要做的就是用text.replace功能來代替BvalueBvalue[0]b value編號爲1, Bvalue[1]指的是b value數字2,依此類推。

+0

我想用'a'值替換'b',我需要例如輸入的函數:('第二','new_value'),我得到了'a:'第一'[as34ttatgv34tgw34t $'b':'man',a:'second'[sdfg53t3srthhghrs $'b':'new_value'',這個怎麼用這個正則表達式 –

+0

@ŁukaszMleczko我更新了我的代碼。所有你現在要做的就是使用這個函數:'text.replace(Bvalue [0],'car',1)'替換第一個'b值'和'Bvalue [1]'替換第二個'b值','Bvalue [2]'替換第三個'b值'等等。 – Ibrahim

+0

可以通過使用文本進行搜索,例如我想找到冰箱並將其'b'更改爲揚聲器。 'a:'fridge'[as34ttatgv34tgw34t $'b':'man',a:'apple'[sdfg53t3srthhghrs $'b':'woman'' to:'a:'fridge'[as34ttatgv34tgw34t $'b':'揚聲器',答:'蘋果'[sdfg53t3srthhghrs $'b':'woman'' 正如我所說,我想要的東西像函數,我首先得到兩個參數是'a'的內容接下來是替換'b'這個'a'。 –