Jak mogę mieć wyrażenie regularne, które sprawdza spacje lub tabulatory, ale nie znaki nowej linii. Próbowałem, \s
ale okazało się, że testuje również nowe linie.
Używam C # / WPF, ale to nie powinno mieć znaczenia.
Odpowiedzi:
Użyj klas postaci: [ \t]
\t
?
Jak zauważył @ Eiríkr Útlendi, przyjęte rozwiązanie uwzględnia tylko dwa białe znaki: tabulator poziomy (U + 0009) i spację (U + 0020). Nie uwzględnia innych białych znaków, takich jak nierozdzielające spacje (które zdarzają się w tekście, z którym próbuję sobie poradzić). Bardziej kompletna lista białych znaków jest zawarta w Wikipedii, a także w powiązanej odpowiedzi Perla . Proste rozwiązanie C #, które uwzględnia te inne znaki, można zbudować za pomocą odejmowania klas znaków
[\s-[\r\n]]
lub, w tym rozwiązanie Eiríkr Útlendi, otrzymasz
[\s\u3000-[\r\n]]
Uwaga: dla osób zajmujących się tekstem CJK (chińskim, japońskim i koreańskim) spacja dwubajtowa (Unicode \u3000
) nie jest uwzględniona w \s
żadnej implementacji, którą do tej pory wypróbowałem (Perl, .NET, PCRE, Python). Musisz albo normalizować pierwszych strun (takich jak zastępując wszystko \u3000
z \u0020
), lub będziesz musiał użyć zestawu znaków, który zawiera ten kodowy oprócz cokolwiek innego spacje jesteś kierowania, takich jak [ \t\u3000]
.
Jeśli używasz Perla lub PCRE, możesz użyć \h
skrótu dla poziomych białych znaków , które wydają się obejmować między innymi spację jednobajtową, dwubajtową i tabulator. Zobacz wątek Dopasuj białe znaki, ale nie znaki nowej linii (Perl), aby uzyskać więcej szczegółów.
Jednak ten \h
skrót nie został zaimplementowany dla .NET i C #, najlepiej, jak mogłem powiedzieć.
\h
(wprowadzona w Javie 8) obejmuje \u3000
, ale \s
nie, chyba że ustawisz tryb UNICODE_CHARACTER_CLASS (wprowadzony w Javie 7).
Jeśli chcesz zamienić miejsce, poniższy kod zadziałał dla mnie wC#
Regex.Replace(Line,"\\\s","");
Dla tab
Regex.Replace(Line,"\\\s\\\s","");
\h
klasą znaków tylko dla perla , ale pokazuje, że istnieje wiele innych białych znaków, na wypadek gdybyś musiał dodać je do listy tutaj.