2016-08-22 8 views
1

Ich habe einen regulären Ausdruck, durch die ich möchte mit diesen Werten Werte ersetzen minus 10. Die re:Python wieder ersetzen Gruppenwerte

re.compile(r'<stuff[^\>]*translate\((?P<x>\d*),(?P<y>\d*)\)"/>') 

Ich möchte die x- und y-Gruppen ersetzen. Um dies zu tun, möchte ich re.sub verwenden und eine Funktion übergeben. Wie aber kann ich in der Funktion am einfachsten eine Zeichenkette erstellen, die der Eingabe entspricht, nur wenn die x- und y-Werte durch sie selbst minus 10 ersetzt werden?

+0

Werfen Sie einen Blick auf [diese] (http://stackoverflow.com/questions/2763750/how-to-replace-only-part-of -the-match-with-python-re-sub) Antwort auf eine sauberere Art und Weise – FujiApple

Antwort

0

Die re.sub docs zeigen ein gutes Beispiel für die Verwendung einer Replacement-Funktion. In Ihrem Fall würde diese Arbeit:

import re 

def less10(string): 
    return int(string) - 10 

def replacer(match): 
    return '%s%d,%d%s' % (match.group('prefix'), 
          less10(match.group('x')), 
          less10(match.group('y')), 
          match.group('suffix')) 

print re.sub(r'(?P<prefix><stuff[^>]*translate\()(?P<x>\d*),(?P<y>\d*)(?P<suffix>\)/>)', 
      replacer, 
      '<stuff translate(100,200)/>') 

http://ideone.com/tQS4wK

+0

Dies ersetzt jedoch nicht die neuen Werte in der Zeichenfolge. Ich möchte die Eingabezeichenfolge durch dieselbe mit neuen x- und y-Werten ersetzen, aber alles andere ist gleich. – Sandeep

+0

Ok. Das war in deiner Frage nicht klar. – tony19

+0

Ich habe die Frage aktualisiert, um es klarer zu machen. – Sandeep