Python Regex Match Space Only

Python Regex Match Space Only

In python3, how do I match exactly whitespace character and not newline \n or tab \t?

I've seen the \s+[^\n] answer from Regex match space not \n answer, but for the following example it does not work:

a='rasd\nsa sd'
print(re.search(r'\s+[^ \n]',a))

Result is <_sre.SRE_Match object; span=(4, 6), match='\ns'>, which is the newline matched.

1

2 Answers

No need for special groups. Just create a regex with a space character. The space character does not have any special meaning, it just means "match a space".

RE = re.compile(' +')

So for your case

a='rasd\nsa sd'
print(re.search(' +', a))

would give

<_sre.SRE_Match object; span=(7, 8), match=' '>
2

If you want to match 1 or more whitespace chars except the newline and a tab use

r"[^\S\n\t]+"

The [^\S] matches any char that is not a non-whitespace = any char that is whitespace. However, since the character class is a negated one, when you add characters to it they are excluded from matching.

Python demo:

import re
a='rasd\nsa sd'
print(re.findall(r'[^\S\n\t]+',a))
# => [' ']

Some more considerations: \s matches [ \t\n\r\f\v] if ASCII flag is used. So, if you plan to only match ASCII, you might as well use [ \r\f\v] to exclude the chars you want. If you need to work with Unicode strings, the solution above is a viable one.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

James H. Sterling
Author

James H. Sterling

James Sterling reports on renewable energy developments, climate policy, ecological conservation, and green tech innovations around the globe.