/ / Logiczne lub grupy regex - python, regex, regex-group

Logiczne lub grupy regex - python, regex, regex-group

Próbuję zrobić regex, który znajdzie pewne przypadki nieprawidłowo wprowadzonych frakcji i zwróci licznik i mianownik jako grupy.

Te przypadki obejmują spację między ukośnikiem a liczbą: na przykład 1 /2 lub 1/ 2.

Używam operatora logicznego lub regex w regex, ponieważ wolę nie mieć 2 osobnych wzorców do sprawdzenia:

r"(d) /(d)|(d)/ (d)"

(Nie używam d+ ponieważ jestem bardziej zainteresowany liczbami bezpośrednio graniczącymi ze znakiem podziału d+ też by działało).

Problem polega na tym, że kiedy pasuje do jednego z przypadków, powiedzmy drugi (1/ 2), patrząc na wszystkie grupy daje (None, None, "1", "2"), ale chciałbym mieć wyrażenie regularne, które zwraca tylko 2 grupy - w obu przypadkach chciałbym, aby grupy były ("1", "2"). czy to możliwe?

Edytować: Chciałbym również, aby zwróciła grupy ("1", "2") w sprawie 1 / 2, ale żeby nie uchwycić niczego dla dobrze uformowanych frakcji, takich jak 1/2.

Odpowiedzi:

3 dla odpowiedzi № 1

(d)(?: /|/ | / )(d) powinien to zrobić (i zwracać tylko niepoprawnie wpisane ułamki). Zwróć uwagę na użycie grup bez przechwytywania.

Edytuj: zaktualizowano za pomocą komentarzy poniżej.


3 dla odpowiedzi № 2

A co z używaniem (d)s*/s*(d)?

W ten sposób zawsze będziesz mieć tylko dwie grupy:

>>> import re
>>> regex = r"(d)s*/s*(d)"
>>> re.findall(regex, "1/2")
[("1", "2")]
>>> re.findall(regex, "1 /2")
[("1", "2")]
>>> re.findall(regex, "1/ 2")
[("1", "2")]
>>> re.findall(regex, "1 / 2")
[("1", "2")]
>>>