Woody_90
#naukaprogramowania #python
Uczę się pythona, na ten moment ćwiczę regexy. Chcę napisać regex który wykryłby mi jeden z wzorców daty (dzień miesiąc rok lub na odwrót). Kiedy daję tylko jeden z tych wzorców jest ok, kiedy są dwa to dostaję
[('3', '/', '14', '/', '2019', '', '', '', '', ''), ('03', '-', '14', '-', '2019', '', '', '', '', ''), ('', '', '', '', '', '2015', '/', '3', '/', '19')]
Co w kodzie powoduje że dodaje mi '', '', '', '', '' do znalezionej listy? regex poniżej
dateRegex = re.compile(r'''
(\d{1,2})(/|-)(\d{1,2})(/|-)(\d{4})|
(\d{4})(/|-)(\d{1,2})(/|-)(\d{1,2})
''', re.VERBOSE )
  • Najlepsze
  • Wszystkie komentarze
patrolez
@Woody_90: każda para nawiasów "(" i ")" oznacza grupę i zazwyczaj w RegExp też to oznacza, że autor, tworząc grupę, prawie na pewno będzie potrzebował potem wyciągnąć wynik dopasowania wzorca z każdej grupy.

Do zabawy i ćwiczeń polecam: https://regex101.com/
Po prawej stronie będzie kolumna pokazująca co zadane wyrażenie oznacza.

Albo https://www.debuggex.com/
patrolez
@Woody_90: dobra, chyba rozumiem o co ci chodzi.

Nie tylko o grupy, ale też o alternatywy. Brakuje ci nawiasów:

##(\d{1,2})(/|-)(\d{1,2})(/|-)(\d{4}) | (\d{4})(/|-)(\d{1,2})(/|-)(\d{1,2})
(((\d{1,2})(/|-)(\d{1,2})(/|-)(\d{4}))|((\d{4})(/|-)(\d{1,2})(/|-)(\d{1,2})))
Wtedy będziesz mieć gwarancję, że pierwsza grupa będzie mieć albo jedną datę, albo drugą.
Woody_90
Woody_90 Autor
0
@patrolez:
Teraz skumałem, te '', '', '', '', '' są od drugiej grupy, tej po |- tak jak piszesz reprezentuje w krotce każde (). Dzięki!