可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I want to remove trailing white spaces and tabs from my code without
removing empty lines.
I tried:
\s+$
and:
([^\n]*)\s+\r\n
But they all removed empty lines too. I guess \s
matches end-of-line characters too.
UPDATE (2016):
Nowadays I automate such code cleaning by using Sublime's TrailingSpaces package, with custom/user setting:
"trailing_spaces_trim_on_save": true
It highlights trailing white spaces and automatically trims them on save.
回答1:
Try just removing trailing spaces and tabs:
[ \t]+$
回答2:
To remove trailing whitespace while also preserving whitespace-only lines, you want the regex to only remove trailing whitespace after non-whitespace characters. So you need to first check for a non-whitespace character. This means that the non-whitespace character will be included in the match, so you need to include it in the replacement.
Regex: ([^ \t\r\n])[ \t]+$
Replacement: \1
or $1
, depending on the IDE
回答3:
The platform is not specified, but in C# (.NET) it would be:
Regular expression (presumes the multiline option - the example below uses it):
[ \t]+(\r?$)
Replacement:
$1
For an explanation of "\r?$", see Regular Expression Options, Multiline Mode (MSDN).
Full code example
This will remove all trailing spaces and all trailing TABs in all lines:
string cleanedUpText = Regex.Replace(inputText,
@"[ \t]+(\r?$)", @"$1",
RegexOptions.Multiline);
回答4:
Regex to find trailing and leading whitespaces :
^[ \t]+|[ \t]+$
回答5:
If using Visual Studio 2012 and later (which uses .Net regular expressions), you can remove trailing whitespace without removing blank lines by using the following regex
Replace (?([^\r\n])\s)+(\r?\n)
With $1
Some explanation
The reason you need the rather complicated expression is that the character class \s
matches spaces, tabs and newline characters, so \s+
will match a group of lines containing only whitespace. It doesn't help adding a $
termination to this regex, because this will still match a group of lines containing only whitespace and newline characters.
You may also want to know (as I did) exactly what the (?([^\r\n])\s)
expression means. This is an Alternation Construct, which effectively means match to the whitespace character class if it is not a carriage return or linefeed.
Alternation constructs normally have a true and false part,
(?( expression ) yes | no )
but in this case the false part is not specified.
回答6:
To remove trailing white space while ignoring empty lines I use positive look-behind:
(?<=\S)\s+$
The look-behind is the way go to exclude the non-whitespace (\S) from the match.
回答7:
[ |\t]+$ with an empty replace works.
\s+($) with a $1 replace also works.
at least in vscode...
回答8:
You can use the regex /^[ \t\v\f]+\S.*$/gm
to remove leading whitespace of each line, without touching blank lines nor trailing whitespace:
const str = ' X \n\nY Y\n \n Z'.replace(/^[ \t\v\f]+(\S.*)$/gm, '$1');
console.log(str);
// output: 'X \n\nY Y\n \nZ'
If you want more robust support although a bit slower, use the regex /^[ \t\v\f\xA0\uFEFF]+(\S.*)$/gm
, which includes NBSP and BOM, making it closer to the \s
behavior.
ADDED:
This is more simple and compliant with the \s
behavior: /^(?=\s+).+(\S.*)$/gm
...but I don't know if it will work in older browsers.
WARNING:
Any solution based on a simple regex can break ES6 TL strings.
回答9:
In Java:
String str = " hello world ";
// prints "hello world"
System.out.println(str.replaceAll("^(\\s+)|(\\s+)$", ""));
回答10:
you can simply use like this
sample : click here