Dziwne zachowanie w wyrażeniach regularnych Pythona - findall znajduje tylko część „()?” [Duplikat]
To pytanie ma już tutaj odpowiedź:
wyrażenie regularne python: re.findall (r „(do | re | mi) +”, „mimi rere midore”) 1 odpowiedźObecnie piszę wyrażenie regularne, aby znaleźć jednostki i rozmiar (lub może działać jako wymiary) w ciągu. Na przykład: „Produkt: A, 2 butelki 3,5 galona”
Dla uproszczenia usuwam wszystkie białe znaki, więc staje się to:
„Produkt: A, 2x3,5 gallonbottles”
Moje wyrażenie regularne wygląda następująco:
numAndSize = re.compile(r'\d+[xX]\d+(\.\d+)?')
Ale kiedy próbuję użyć findall, dzieje się tak:
In [47]: numAndSize.findall("Product:A,2x3.5gallonbottles")
Out[47]: ['.5']
Ja tylko otrzymuję „.5” w tym ciągu zamiast całego wyrażenia
Korzystanie z wyszukiwania i grupy działa jednak zgodnie z oczekiwaniami:
In [50]: numAndSize.search("Product:A,2x3.5gallonbottles").group(0)
Out[50]: '2x3.5'
Stamtąd próbowałem zmienić wyrażenie regularne, aby nie zawierało opcjonalnego dziesiętnego, i uruchomiłem na nim findall.
In [51]: numAndSize = re.compile(r'\d+[xX]\d+')
In [52]: numAndSize.findall("Product:A,2x3.5gallonbottles")
Out[52]: ['2x3']
Czy istnieje powód takiego zachowania? Dla moich celów mogę z pewnością użyć .search (). Group (), ale osobiście lubię findall, ponieważ dane wyjściowe dają dużo więcej informacji w czystym formacie.