Регулярное выражение: найти пробелы (табуляции / пробела), но не переводы строк - PullRequest
74 голосов
/ 27 августа 2010

Как получить регулярное выражение, которое проверяет пробелы или символы табуляции, но не переводит строки. Я попробовал \s, но обнаружил, что он также проверяет наличие новых строк.

Я использую C # / WPF, но это не должно иметь значения.

Ответы [ 4 ]

150 голосов
/ 27 августа 2010

Использовать классы персонажей: [ \t]

29 голосов
/ 27 августа 2010

Попробуйте этот набор символов:

[ \t]

Это соответствует только пробелу или табулятору.

13 голосов
/ 27 июня 2016

Как отметил @ Eiríkr Útlendi, в принятом решении учитываются только два символа пробела: горизонтальная табуляция (U + 0009) и пробел (U + 0020). Он не учитывает другие пробельные символы, такие как неразрывные пробелы (которые находятся в тексте, с которым я пытаюсь разобраться). Более полный список пробельных символов включен в Wikipedia , а также указан в связанном ответе Perl . Простое решение C #, которое учитывает эти другие символы, может быть построено с использованием вычитания класса символов

[\s-[\r\n]]

или, включая решение Эйрикр Атленди, вы получите

[\s\u3000-[\r\n]]
3 голосов
/ 20 апреля 2016

Примечание: Для тех, кто работает с текстом CJK (китайский, японский и корейский), двухбайтовый пробел (Unicode \u3000) составляет , а не , включенный в \sдля любой реализации, которую я пробовал до сих пор (Perl, .NET, PCRE, Python).Сначала вам нужно либо нормализовать свои строки (например, заменив все \u3000 на \u0020), либо вам придется использовать набор символов, который включает эту кодовую точку в дополнение к любому другому пробелу, на который вы нацеливаетесь,например, [ \t\u3000].

Если вы используете Perl или PCRE, у вас есть возможность использовать сокращение \h для горизонтального пробела , которое, по-видимому, включает однобайтовыйпробел, двухбайтовый пробел и табуляция, среди прочего.Подробности смотрите в потоке Match, но не в новых строках (Perl) .

Однако, эта краткая запись \h не была реализована для .NET и C #,как я мог сказать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...