Jak sprawdzić, czy ciąg znaków pasuje do tego wzoru?
Wielkie litery, cyfry, wielkie litery, cyfry ...
Przykład, będą pasować:
A1B2
B10L1
C1N200J1
Nie byłyby („^” wskazuje na problem)
a1B2
^
A10B
^
AB400
^
python
regex
string-matching
DanielTA
źródło
źródło
^([A-Z]\d+){1,}$
lubię to?B
a nie byćA
.A
iB
czy małe litery są w porządku?A10b
iaB400
?Odpowiedzi:
Edycja: Jak zauważono w komentarzach,
match
sprawdza tylko dopasowania na początku łańcucha, are.search()
dopasuje wzór w dowolnym miejscu łańcucha. (Zobacz także: https://docs.python.org/library/re.html#search-vs-match )źródło
re.match
:If zero or more characters at the beginning of string match the regular expression pattern
. Po prostu spędziłem około 30 minut, próbując zrozumieć, dlaczego nie mogłem dopasować czegoś na końcu łańcucha. Wydaje się, że to niemożliwematch
, prawda? Do tegore.search(pattern, my_string)
jednak działa.^
na początku jest coś takiego jak domniemane, kiedy używaszmatch
. Myślę, że to trochę bardziej skomplikowane niż to bardzo proste wytłumaczenie, ale nie jestem do końca pewien. Masz jednak rację, że zaczyna się od początku łańcucha.Jednowarstwowy:
re.match(r"pattern", string) # No need to compile
Możesz to ocenić w
bool
razie potrzebyźródło
import re
jako pierwszego wierszare.match
w kontekścieif
, ale musisz użyć,bool
jeśli używasz go w innym miejscu?re.match
. Pasuje tylko na początku łańcucha.re.search
Zamiast tego spójrz na .if
sprawdza dopasowaniaNone
.Spróbuj wykonać następujące czynności:
źródło
źródło
wyrażenia regularne ułatwiają to ...
[A-Z]
dopasuje dokładnie jeden znak między A i Z\d+
dopasuje jedną lub więcej cyfr()
grupuj rzeczy (a także zwracaj rzeczy ... ale na razie pomyśl o grupowaniu)+
wybiera 1 lub więcejźródło
Uważam, że powinno to działać z wielkimi, liczbowymi wzorami liczbowymi .
źródło