Wyrażenie regularne: znajdź spacje (tabulatory / spacje), ale nie znaki nowej linii
97
Jak mogę mieć wyrażenie regularne, które sprawdza spacje lub tabulatory, ale nie znaki nowej linii. Próbowałem, \sale okazało się, że testuje również nowe linie.
Używam C # / WPF, ale to nie powinno mieć znaczenia.
Spotkaj się z moim problemem. Zobacz także stackoverflow.com/a/25956935/292060, aby zapoznać się z \hklasą znaków tylko dla perla , ale pokazuje, że istnieje wiele innych białych znaków, na wypadek gdybyś musiał dodać je do listy tutaj.
goodeye
3
dlaczego miałoby być miejsce przed \t?
Ooker
4
@Ooker Aby uchwycić dosłowną przestrzeń
codemonkee
To nie będzie pasować do innych rodzajów przestrzeni, jak wspomniały inne odpowiedzi.
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
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 \u3000z \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ć \hskró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 \hskrót nie został zaimplementowany dla .NET i C #, najlepiej, jak mogłem powiedzieć.
\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.\t
?Wypróbuj ten zestaw znaków:
To pasuje tylko do spacji lub tabulatora.
źródło
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
lub, w tym rozwiązanie Eiríkr Útlendi, otrzymasz
źródło
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ć.źródło
\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 w
C#
Regex.Replace(Line,"\\\s","");
Dla tab
Regex.Replace(Line,"\\\s\\\s","");
źródło