Ryan Delucchi
Ryan Delucchi

Reputation: 7748

Removing all whitespace characters except for " "

I consider myself pretty good with Regular Expressions, but this one is appearing to be surprisingly tricky: I want to trim all whitespace, except the space character: ' '.

In Java, the RegEx I have tried is: [\s-[ ]], but this one also strips out ' '.

UPDATE:

Here is the particular string that I am attempting to strip spaces from:

project team                manage key

Note: it would be the characters between "team" and "manage". They appear as a long space when editing this post but view as a single space in view mode.

Upvotes: 15

Views: 14681

Answers (4)

seawave_23
seawave_23

Reputation: 1248

I solved it with this:

anyString.replace(/[\f\t\n\v\r]*/g, '');

It is just a collection of all possible white space characters excluding blank (so actually \s without blanks). It includes tab, carriage return, new line, vertical tab and form feed characters.

Upvotes: 1

ColinD
ColinD

Reputation: 110056

Using a Guava CharMatcher:

String text = ...
String stripped = CharMatcher.WHITESPACE.and(CharMatcher.isNot(' '))
    .removeFrom(text);

If you actually just want that trimmed from the start and end of the string (like String.trim()) you'd use trimFrom rather than removeFrom.

Upvotes: 7

maaartinus
maaartinus

Reputation: 46422

There's no subtraction of character classes in Java, otherwise you could use [\s--[ ]], note the double dash. You can always simulate set subtraction using intersection with the complement, so

[\s&&[^ ]]

should work. It's no better than [^\S ]+ from the first answer, but the principle is different and it's good to know both.

Upvotes: 3

Mark Byers
Mark Byers

Reputation: 838226

Try using this regular expression:

[^\S ]+

It's a bit confusing to read because of the double negative. The regular expression [\S ] matches the characters you want to keep, i.e. either a space or anything that isn't a whitespace. The negated character class [^\S ] therefore must match all the characters you want to remove.

Upvotes: 36

Related Questions