Opanowanie złożonych wyrażeń regularnych
Wyrażenia regularne (regex) to wszechstronne narzędzia do dopasowywania wzorców i manipulacji tekstem. W tym samouczku omówiono zaawansowane techniki wyrażeń regularnych, które ułatwiają skuteczniejsze zarządzanie złożonymi scenariuszami przetwarzania tekstu.
Twierdzenia wsteczne
Twierdzenia „lookbehind” umożliwiają dopasowanie wzorca tylko wtedy, gdy jest on poprzedzony innym wzorcem. Jest to przydatne do zapewnienia kontekstu bez włączania go do dopasowania.
- Pozytywne spojrzenie w przyszłość
(?<=...)
: Dopasowuje wzorzec tylko wtedy, gdy jest poprzedzony określonym wyrażeniem. - Negatywne spojrzenie w przyszłość
(?<!...)
: Dopasowuje wzorzec tylko wtedy, gdy nie jest poprzedzony określonym wyrażeniem.
Przykład:
(?<=Mr\.|Mrs\.)\s[A-Z]\w+
To wyrażenie regularne pasuje do nazw poprzedzonych "Mr." lub "Mrs.".
Wzory warunkowe
Wzorce warunkowe umożliwiają dopasowywanie różnych wzorców w zależności od spełnienia określonego warunku. Składnia jest następująca: (?(warunek)prawdziwy-wzorzec|fałszywy-wzorzec)
.
Przykład:
(\d{3}-)?\d{3}-\d{4}
To wyrażenie regularne dopasowuje numery telefonów z numerem kierunkowym lub bez.
Podprogramy i rekurencja
Podprogramy i rekurencja umożliwiają ponowne użycie wzorców w tym samym wyrażeniu regularnym lub dopasowanie zagnieżdżonych struktur. Jest to szczególnie przydatne w przypadku złożonych i zagnieżdżonych danych.
Przykład:
(?<group>\((?>[^()]+|(?&group))*\))
To wyrażenie regularne dopasowuje zrównoważone nawiasy do zagnieżdżonych poziomów.
Kwantyfikatory dzierżawcze
Kwantyfikatory dzierżawcze zapobiegają cofaniu się silnika wyrażeń regularnych, co może poprawić wydajność, jeśli chcesz mieć pewność, że cofanie się nie nastąpi.
Przykład:
\w++
To wyrażenie regularne dopasowuje sekwencję znaków wyrazów w sposób dzierżawczy, co oznacza, że nie zrezygnuje ze znaków po dopasowaniu.
Używanie flag do lepszego dopasowywania
Flagi Regex modyfikują zachowanie dopasowywania wzorców. Niektóre typowe flagi obejmują:
- 'i': Dopasowanie bez uwzględniania wielkości liter.
- 'm': Tryb wielowierszowy wpływający na zachowanie
^
i$
. - 's': Tryb Dotall, umożliwiający
.
dopasowywanie znaków nowej linii. - 'x': Ignoruj białe znaki i zezwalaj na komentarze we wzorcu, aby zapewnić czytelność.
Przykład:
/pattern/imsx
Ten wzorzec dotyczy trybów nieuwzględniających wielkości liter, wielowierszowych, kropkowych i rozszerzonych.
Przykłady w językach programowania
Oto kilka przykładów użycia zaawansowanego wyrażenia regularnego w Pythonie i JavaScript:
Przykład Pythona
import re
# Match a name preceded by Mr. or Mrs.
pattern = r'(?<=Mr\.|Mrs\.)\s[A-Z]\w+'
text = 'Mr. Smith and Mrs. Johnson'
matches = re.findall(pattern, text)
for match in matches:
print('Match found:', match)
Przykład JavaScriptu
// Match a name preceded by Mr. or Mrs.
const pattern = /(?<=Mr\.|Mrs\.)\s[A-Z]\w+/g;
const text = 'Mr. Smith and Mrs. Johnson';
const matches = text.match(pattern);
if (matches) {
matches.forEach(match => console.log('Match found:', match));
}
Wniosek
Zaawansowane techniki wyrażeń regularnych, takie jak asercje typu lookbehind, wzorce warunkowe, podprogramy, rekurencja i kwantyfikatory dzierżawcze, rozszerzają możliwości wyrażeń regularnych w przypadku złożonego przetwarzania tekstu. Opanowanie tych koncepcji umożliwia wykonywanie skomplikowanych zadań dopasowywania i manipulacji z większą wydajnością i precyzją.