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.

questionAnswers(2)

yourAnswerToTheQuestion