Как мне удалить конечные пробелы с помощью регулярного выражения? - PullRequest
57 голосов
/ 02 марта 2012

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

Я пытался:

\s+$

и:

([^\n]*)\s+\r\n

Новсе они тоже удалили пустые строки.Я думаю, \s также соответствует символам конца строки.


ОБНОВЛЕНИЕ (2016):

В настоящее время я автоматизирую такиеочистка кода с помощью пакета Sublime TrailingSpaces , с пользовательскими настройками:

"trailing_spaces_trim_on_save": true

Подсвечивает конечные пробелы и автоматически обрезает их при сохранении.

Ответы [ 10 ]

109 голосов
/ 02 марта 2012

Попробуйте просто удалить завершающие пробелы и вкладки:

[ \t]+$
29 голосов
/ 29 января 2014

Чтобы удалить конечные пробельные символы, сохраняя при этом также строки только для пробелов, вы хотите, чтобы регулярное выражение удаляло только конечные пробельные символы после непробельных символов.Поэтому вам нужно сначала проверить наличие непробельного символа.Это означает, что символ без пробелов будет включен в совпадение, поэтому вам необходимо включить его в замену.

Regex: ([^ \t\r\n])[ \t]+$

Замена: \1 или $1, в зависимости от IDE

10 голосов
/ 31 мая 2015

Платформа не указана, но в C # ( .NET ) это будет:

Регулярное выражение (предполагает многострочный параметр - в приведенном ниже примере используется):

    [ \t]+(\r?$)

Замена :

    $1
<Ч />

Описание "\ r? $" См. В Параметры регулярных выражений, многострочный режим (MSDN).

Пример кода

Это удалит все завершающие пробелы и все завершающие вкладки во всех строках:

string inputText = "     Hello, World!  \r\n" +
                   "  Some other line\r\n" +
                   "     The last line  ";
string cleanedUpText = Regex.Replace(inputText,
                                     @"[ \t]+(\r?$)", @"$1",
                                     RegexOptions.Multiline);
2 голосов
/ 18 января 2018

Regex для поиска конечных и ведущих пробелов:

^[ \t]+|[ \t]+$
1 голос
/ 13 июля 2018

Если вы используете Visual Studio 2012 и более поздние версии (, в котором используются регулярные выражения .NET ), вы можете удалить конечные пробелы, не удаляя пустые строки, используя следующее регулярное выражение

Заменить (?([^\r\n])\s)+(\r?\n)

С $1

Enter image description here


Некоторое объяснение

Причина, по которой вам нужно довольно сложное выражение, заключается в том, что класс символов \s соответствует пробелам, символам табуляции и символам новой строки, поэтому \s+ будет соответствовать группе строк, содержащей только пробелы. Это не помогает добавить $ завершение к этому регулярному выражению, потому что оно все равно будет соответствовать группе строк, содержащей только пробел и символы новой строки.

Вы также можете узнать (как я) точно, что означает выражение (?([^\r\n])\s). Это Alternation Construct , который фактически означает соответствие классу пробельных символов, если это не возврат каретки или перевод строки.

Чередующиеся конструкции обычно имеют истинную и ложную части,

(?( expression ) yes | no )

но в этом случае ложная часть не указана.

0 голосов
/ 09 апреля 2019

Чтобы удалить пробелы в конце, используйте это:

\n|^\s+\n

Я тестировал в редакторах Atom и Xcode .

0 голосов
/ 12 февраля 2019

Вы можете просто использовать это так:

var regex = /( )/g;

Образец: нажмите здесь

0 голосов
/ 29 января 2019

В Java:



String str = "    hello world  ";

// prints "hello world" 
System.out.println(str.replaceAll("^(\\s+)|(\\s+)$", ""));


0 голосов
/ 11 декабря 2018

[ |\t]+$ с пустой заменой работает.\s+($) с заменой $1 тоже работает.По крайней мере, в коде Visual Studio ...

0 голосов
/ 17 апреля 2016

Чтобы убрать конечные пробелы, игнорируя пустые строки, я использую позитивный взгляд:

(?<=\S)\s+$

Исключением является способ исключения непробельных символов (\ S) из совпадения.

...