Manipulowanie kilkoma ciągami zawierającymi liczbę i postacie. Struny wejściowe są takie elementX5, elementX50 i tak dalej. wiem jak Zmień je elements_10, elements_100 itd. Z następującym kodem:

import re

inp = ["elementX5asdl", "elementX50al;smd;l", "elementX500laknsd", "elementX5000aknsd"]
for el in inp:
    tmp_usr_str = re.search("elementX50*", el).group()
    tmp_usr_str = re.sub(r"elementX", "elements_", tmp_usr_str)
    tmp_usr_str = re.sub(r"\d+", lambda x: str(2*int(x.group())), tmp_usr_str)
    print(tmp_usr_str)

Chciałbym przejść krok dalej, odwracając poduszkę zawierającą liczbę z podciążeniami zawierającymi litery, aby uzyskać coś takiego: 10_elements, 100_elements i tak dalej.

Wiem, że mogę podzielić ciąg, a następnie skomponować go ponownie, ale jest bardziej elegancki sposób używający wyrażeń regularnych, ewentualnie osadzenie polecenia w jednej z już istniejących linii?

2
Francesco Boi 22 luty 2019, 13:07

1 odpowiedź

Jest to najłatwiejsze z regexes do pisania.

(.*)_(.*)

To przechwytuje wszystko przed _ w \1 i wszystko po _ w \2.

Wszystko, co musisz zrobić, to zastąpić dwie grupy podczas zastępowania:

\2_\1

Próbny

0
CinCout 22 luty 2019, 10:14