简体   繁体   中英

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'> <_sre.SRE_Match object; span=(4, 6), match='\\ns'> , which is the newline matched.

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=' '>

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM