2016-04-12 75 views
1

如何Sub使用re.sub一組?應用re.sub組值

我希望它覆蓋3與另一個值

電流:XYZ.Value = 3;

後:XYZ.Value = 5;

現在我的個子看起來是這樣的:

name = XYZ 
value = 5 
content = XYZ.Value = 5 

re.sub(r'(%s\.Value\s*=\s*)([^;]+)' %name, r'\1 ' + value, content) 

這是行不通的,因爲它使覆蓋在值後添加一個額外的空格' '

XYZ.Value = 5;< --- 2空格,而不是1

我也使用分組\g<2>

re.sub(r'(%s\.Value\s*=\s*)([^;]+)' %name, r'\1\g<2>' + value, content) 

但隨後則持續增加對現有的價值,而不覆蓋它試圖:

輸出:XYZ.Value = 3

+0

也許,'應用re.sub(R'(%S \ .value的\ S * = \ S *)([^] +)」%名,R '\克<1>' +值,內容)'會做什麼?您已經將'3'前面的所有空格都捕獲到組1中。 –

回答

1

似乎re.sub(r'(%s\.Value\s*=\s*)([^;]+)' %name, r'\g<1>' + value, content)會做:

  • 刪除反向引用後的空格,因爲您已將3之前的所有空白捕獲到組1中,並且
  • 使用明確的反向引用(\g<n>),允許使用後面的任何數字。

Python demo

import re 
name = 'XYZ' 
value = '5' 
content = 'XYZ.Value = 5' 
print(re.sub(r'(%s\.Value\s*=\s*)([^;]+)' %name, r'\g<1>' + value, content)) 
# => XYZ.Value = 5 
+1

感謝您的幫助:) – gants

0

在您的例子,你可以用值來代替數字 '5':

>>> import re 
>>> name = 'XYZ' 
>>> value = 5 
>>> content = 'XYZ.Value = 5' 
>>> re.sub('\d+', str(value), content) 
'XYZ.Value = 5'