• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego moje wyrażenie regularne nie działa?

Fiszki IT
Fiszki IT
0 głosów
41 wizyt
pytanie zadane 5 marca w Python przez TeaCup Obywatel (1,360 p.)

Hej,

Mam kod:

raw_str4 = "Dostępne opakowania - 5 kg, 18 kg, 25 kg i 28 kg."

weights_regex = "[0-9]+ (l|g|g\*|kg|kg\.|kg,|litr|litry)"
found_weights = re.findall(weights_regex, raw_str4)
print(found_weights)

Chciałbym aby w found weights była lista, w tym przykładzie jak: [5kg, 18kg, 25kg, 28kg]

Jednak program zwraca mi listę: ['kg', 'kg', 'kg', 'kg']

Sprawdzałem to wyrażenie regularne z https://regex101.com/ i tam zwracało mi poprawny wynik więc nie wiem gdzie robię błąd.

Moje pytanie to: jak skonstruować to wyrażenie regularne tak aby zwracało mi poprawną listę czyli [5kg, 18kg, 25kg, 28kg] ?

Dzięki za pomoc.

Cześć.

1 odpowiedź

0 głosów
odpowiedź 5 marca przez TeaCup Obywatel (1,360 p.)

Cześć,

Rozwiązanie jest użycie symbolu "non-capturing groups", tak jak:

weights_regex = "[0-9]+ (?:l|g|g\*|kg|kg\.|kg,|litr|litry)"

Natywnie findall biblioteki re zwraca wpierw grupy i aby temu zapobiec trzeba użyć symbolu "?:".

Dzięki temu output to:

['5 kg', '18 kg', '25 kg', '28 kg']

Czyli tak jak miało być.

Podobne pytania

0 głosów
1 odpowiedź 84 wizyt
0 głosów
2 odpowiedzi 161 wizyt
pytanie zadane 19 czerwca 2017 w JavaScript przez ASido Użytkownik (510 p.)
0 głosów
1 odpowiedź 177 wizyt
pytanie zadane 22 maja 2018 w Python przez DeBos123 Nałogowiec (44,920 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

84,702 zapytań

133,503 odpowiedzi

295,887 komentarzy

55,979 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...