2012-12-22 28 views
36

Czy istnieje sposób na bezpośrednią zamianę wszystkich grup w składni regex.Python Regex natychmiast zastępuje grupy

normalny sposób:

re.match(r"(?:aaa)(_bbb)", string1).group(1) 

Jeszcze chcę osiągnąć coś takiego:

re.match(r"(\d.*?)\s(\d.*?)", "(CALL_GROUP_1) (CALL_GROUP_2)") 

Więc po prostu chcesz zbudować nowy ciąg chwilowa jeśli to możliwe poprzez wywołanie grup regex tylko złapany.

Odpowiedz

76

Wystarczy popatrzeć na re.sub:

result = re.sub(r"(\d.*?)\s(\d.*?)", r"\1 \2", string1) 

Jest regex zastąpienie Pythona (Replace) funkcji. Łańcuch zastępczy może być wypełniony tak zwanymi odwołaniami wstecznymi (odwrotnym ukośnikiem, numerem grupy), które zastępowane są przez elementy odpowiadające grupom. Grupy są zliczane tak samo jak przez funkcję group(...), tj. Począwszy od 1, od lewej do prawej, przez otwarcie nawiasów.