Как получить регулярное выражение, которое проверяет наличие пробелов или табуляций, но не символов новой строки. Я пробовал, \s
но обнаружил, что он тоже проверяет новые строки.
Я использую C # / WPF, но это не имеет значения.
Используйте классы персонажей: [ \t]
\h
класса символов только для perl , но он показывает, что есть много других пробельных символов, на случай, если вам нужно добавить их в список здесь.\t
?Попробуйте этот набор символов:
Это соответствует только пробелу или табулятору.
источник
Как отметил @ Eiríkr Útlendi, в принятом решении учитываются только два символа пробела: горизонтальная табуляция (U + 0009) и разрывной пробел (U + 0020). Он не учитывает другие символы пробелов, такие как неразрывные пробелы (которые встречаются в тексте, с которым я пытаюсь разобраться). Более полный список пробельных символов включен в Википедию, а также упоминается в связанном ответе Perl . Простое решение C #, учитывающее эти другие символы, может быть построено с использованием вычитания класса символов.
или, включая решение Eiríkr tlendi, вы получите
источник
Примечание. Для тех, кто работает с текстом CJK (китайский, японский и корейский), двухбайтовое пространство (Unicode
\u3000
) не включено ни в\s
одну из реализаций, которые я пробовал до сих пор (Perl, .NET, PCRE, Python). Вам нужно будет либо сначала нормализовать свои строки (например, заменив все\u3000
на\u0020
), либо вам придется использовать набор символов, который включает этот код в дополнение к любому другому пробелу, на который вы нацеливаетесь, например[ \t\u3000]
.Если вы используете Perl или PCRE, у вас есть возможность использовать
\h
сокращение для горизонтальных пробелов , которые, по-видимому, включают однобайтовое пространство, двухбайтовое пространство и табуляцию, среди прочего. Подробнее см. Ветку Сопоставление пробелов, но не новых строк (Perl) .Однако,
\h
насколько мне удалось судить , это сокращение не было реализовано для .NET и C #.источник
\h
(представленная в Java 8) включает\u3000
, но\s
не включает, если вы не установите режим UNICODE_CHARACTER_CLASS (представленный в Java 7).Если вы хотите заменить пробел ниже, код работал у меня в
C#
Regex.Replace(Line,"\\\s","");
Для вкладки
Regex.Replace(Line,"\\\s\\\s","");
источник