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