Wiedziałem, że []
oznacza zbiór dopuszczalnych znaków -różnica b/w [ab] i (a | b) w dopasowaniu do wyrażenia regularnego?
>>> p = r'^[ab]$'
>>>
>>> re.search(p, '')
>>> re.search(p, 'a')
<_sre.SRE_Match object at 0x1004823d8>
>>> re.search(p, 'b')
<_sre.SRE_Match object at 0x100482370>
>>> re.search(p, 'ab')
>>> re.search(p, 'ba')
... Ale dzisiaj natknąłem się na wypowiedzi z pionowych barów w nawiasie definiują wzajemnie wykluczające Patterns -
>>> q = r'^(a|b)$'
>>>
>>> re.search(q, '')
>>> re.search(q, 'a')
<_sre.SRE_Match object at 0x100498dc8>
>>> re.search(q, 'b')
<_sre.SRE_Match object at 0x100498e40>
>>> re.search(q, 'ab')
>>> re.search(q, 'ba')
Wydaje się to naśladować tę samą funkcjonalność co powyżej, czy też czegoś mi brakuje?
PS: W Python
nawiasie sami są wykorzystywane do definiowania grup logicznych dopasowanego tekstu. Jeśli używam drugiej techniki, to w jaki sposób użyć nawiasów dla obu zadań?
nie wiesz o co ci chodzi z bitem nawiasie ... –
Tak, masz rację - '[ab]' i '(a | b) "obaj dopasowują _exactly_ to samo (ale pierwszy dopasuje się szybciej). Wyrażenia regularne są językiem samym w sobie (niezależnie od tego, czy znajdujesz je w Pythonie czy Perlu) i musisz nauczyć się ich (tajemniczej) składni, jeśli zamierzasz z nich efektywnie korzystać. (Np Nawiasy wewnątrz regexpa nie jest taka sama jak poza regex nawiasach). I zalecane po kursie w [regular-expressions.info] (http://www.regular-expressions.info). Każdy spędzony tam czas będzie wielokrotnie nagradzany. – ridgerunner