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")]
>>>