Відповіді:
Використовуйте класи символів: [ \t]
\t?
Як зазначив @ Eiríkr Útlendi, прийняте рішення враховує лише два пробіли: горизонтальну вкладку (U + 0009) та пробіл (U + 0020). Він не враховує інших символів пробілу, таких як пробіли, що не порушуються (що трапляється в тексті, з яким я намагаюся мати справу). Більш повний перелік символів пробілів міститься у Вікіпедії та також посилається на пов'язану відповідь Perl . Просте рішення C #, яке враховує цих інших символів, можна побудувати за допомогою віднімання класів символів
[\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скорочення горизонтального пробілу , яке включає, серед іншого, однобайтовий простір, двобайтовий простір і вкладку. Див. Пробіл Match, але не нові рядки (Perl), щоб отримати докладнішу інформацію.
Однак ця \hстенограма не була реалізована для .NET та C #, як найкраще мені вдалося сказати.
\h(представлена в Java 8) дійсно включає \u3000, але \sне включає, якщо ви не встановите режим UNICODE_CHARACTER_CLASS (представлений в Java 7).
Якщо ви хочете замінити простір нижче коду, який працював у менеC#
Regex.Replace(Line,"\\\s","");
Для вкладки
Regex.Replace(Line,"\\\s\\\s","");
\hкласу символів лише для perl , але він показує, що існує багато інших символів пробілів, якщо вам потрібно додати їх до списку тут.