Czy istnieje prosty sposób na zignorowanie białych znaków w ciągu docelowym podczas wyszukiwania dopasowań przy użyciu wzorca wyrażenia regularnego? Na przykład, jeśli szukam frazy „koty”, chciałbym, aby pasowały słowa „c ats” lub „ca ts”. Nie mogę wcześniej usunąć białych znaków, ponieważ muszę znaleźć indeks początkowy i końcowy dopasowania (w tym wszelkie białe znaki), aby podświetlić to dopasowanie, a wszelkie spacje muszą tam być do celów formatowania.
regex
whitespace
Steven
źródło
źródło
^([a-z]\s*)+$
Uwzględniając komentarz Stevena do odpowiedzi Sama Dufela
To powinno załatwić sprawę:
Zobacz tę stronę, aby zobaczyć wszystkie różne odmiany „kotów”, do których pasuje.
Możesz również rozwiązać ten problem za pomocą warunkowych , ale nie są one obsługiwane w javascriptowym stylu wyrażenia regularnego.
źródło
new RegExp('cats'.split('').join('(?:\n\s*)?'))
Chociaż zaakceptowana odpowiedź jest technicznie poprawna, bardziej praktycznym podejściem jest, jeśli to możliwe, po prostu usunięcie białych znaków zarówno z wyrażenia regularnego, jak i ciągu wyszukiwania.
Jeśli chcesz wyszukać „moje koty”, zamiast:
Po prostu zrób:
Ostrzeżenie: nie można zautomatyzować tego w wyrażeniu regularnym, zastępując wszystkie spacje pustymi ciągami, ponieważ mogą one wystąpić w negacji lub w inny sposób spowodować, że wyrażenie regularne będzie nieprawidłowe.
źródło
Możesz wstawić
\s*
pomiędzy każdy znak w ciągu wyszukiwania, więc jeśli szukasz kota, którego użyjeszc\s*a\s*t\s*s\s*s
Jest długi, ale oczywiście możesz zbudować strunę dynamicznie.
Możesz zobaczyć, jak działa tutaj: http://www.rubular.com/r/zzWwvppSpE
źródło
Jeśli chcesz zezwolić tylko na spacje, to
powinien to zrobić. Aby zezwolić także na karty, użyj
Usuń
\b
kotwice, jeśli chcesz znaleźć równieżcats
słowa takie jakbobcats
lubcatsup
.źródło
To podejście można wykorzystać do automatyzacji tego (poniższe przykładowe rozwiązanie jest w Pythonie, chociaż oczywiście można je przeportować na dowolny język):
możesz wcześniej usunąć białe znaki ORAZ zapisać pozycje znaków niebędących białymi znakami, aby móc ich później użyć, aby znaleźć dopasowane pozycje brzegowe w oryginalnym ciągu, jak poniżej:
Jeśli chcesz pójść dalej, możesz skonstruować obiekt dopasowania i zamiast tego go zwrócić, więc użycie tego pomocnika będzie wygodniejsze.
Wydajność tej funkcji można oczywiście również zoptymalizować, ten przykład służy tylko do pokazania ścieżki do rozwiązania.
źródło