2016-06-12 16 views
1

Ich möchte alternative Ersatzmuster für re & sub0;Python re - alternatives Ersatzmuster

Lassen Sie uns sagen, dass ich zwei Suchmuster als Alternativen haben, wie folgt aus:

re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string) 

und stattdessen ein Ersatzmuster bieten würde Ich mag irgendwie Alternative, welche Suchmuster fangen wurde angepasst und alternative Ersatzmuster liefern . Ist das möglich? Danke.

PS. Code-Details hier sind irrelevant, es ist eine allgemeine Frage.

+0

Ja ist es. Lesen Sie die regexp-Dokumentation. Sie suchen nach Klammern in Klammern. – spectras

+1

Ich kenne die Gruppierungsoptionen in Suchmustern und dann \ number reference innerhalb des Ersatzmusters. Was ich tun möchte, ist: wenn Gruppe \ 1 übereinstimmte, dann ersetze Zeichenfolge durch 'a', wenn Gruppe \ 2 dann durch 'b' ersetzen. – user2965473

Antwort

1

Sie können eine Funktion an re.sub() übergeben. In der Funktion können Sie den Wert basierend auf der erfassten Gruppe zurückgeben. Ein einfacher Code zur Erläuterung:

>>> def fun(m): 
... if m: 
...  if m.group(1): 
...  return 'x' 
...  else: 
...  return 'y' 


>>>print re.sub(r"([A-Z]+)|([a-z]+)", fun , "ab") 

Die Funktion fun() prüft, ob das Spiel auf der erfassten Gruppe gelungen und basiert, liefert die Ersatzzeichenfolge. Wenn [A-Z]+ übereinstimmte, ist x der Ersetzungsstring, sonst wurde [a-z]+ abgeglichen und y ist die Ersetzungszeichenfolge.

Für weitere Informationen: doc

+0

das ist perfekt, danke! – user2965473

0

Normalerweise würden Sie nur zwei Ersatz verwenden:

re.sub(r"[A-Z]+", replacement1, string) 
re.sub(r"[a-z]+", replacement2, string) 

anticlimactic, nicht wahr?

Es ist eigentlich weniger Code als die Alternativen in der Regel, und es ist viel klarer, was Sie tun.