2016-04-12 12 views
1

Wie unterteile ich eine Gruppe mit re.sub?re-Gruppenwert

Ich will es 3 mit einem anderen Wert

Aktuelle außer Kraft zu setzen: XYZ.Value = 3;

Nachher: ​​XYZ.Value = 5;

Im Moment sieht mein Unter wie folgt aus:

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

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

Dies funktioniert nicht, da sie nach dem Überschreiben der Wert ' ' das Hinzufügen einer zusätzlichen Leerzeichen hält:

XYZ.Value = 5;< --- 2 Leerzeichen anstelle von 1

Ich habe auch versucht \g<2>

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

Gruppierung unter Verwendung Aber dann hält sie dann auf dem bestehenden Wert hinzufügen, ohne es überschreiben:

Ausgang: XYZ.Value = 3

+0

Vielleicht 're.sub (r '(% s ​​\ .Value \ s * = \ s *) ([^;] +) '% name, r' \ g <1> '+ Wert, Inhalt' wird es tun? Sie fangen bereits alle Leerzeichen vor '3' in Gruppe 1 ein. –

Antwort

1

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

  • den Raum nach dem Rückreferenzierung entfernen, wie Sie bereits alle Leerzeichen vor 3 in Gruppe 1 erfassen, und
  • eine eindeutige Rückreferenzierung verwenden (\g<n>), die alle Ziffern, nachdem es ermöglicht werden.

Siehe 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

Danke für die Hilfe :) – gants

0

In Ihrem Beispiel Sie Zahlen mit einem Wert ersetzen könnte '5':

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