如何匹配除空格和新线之外的任何东西?

时间:2014-04-23 05:08:11

标签: python regex

我有一个字符串,我只想匹配任何字符的字符串,除了空格和新行。什么必须是正则表达式?

我知道除了空格之外的任何东西的正则表达式,[^ ]+和除了新行[^\n]+之外的任何东西的正则表达式(我在Windows上)。我无法想象如何将他们聚在一起。

3 个答案:

答案 0 :(得分:11)

您可以将空格字符添加到要排除的字符类中。

^[^\n ]*$

正则表达式

^              # the beginning of the string
 [^\n ]*       # any character except: '\n' (newline), ' ' (0 or more times)
$              # before an optional \n, and the end of the string

答案 1 :(得分:3)

如果您只想排除空格和换行符,则可能需要使用

r'^[^ \n]*$'

例如,

print re.match(r'^[^ \n]*$', """WelcometoStackoverflow""")
# <_sre.SRE_Match object at 0x7f77a2a58238>
print re.match(r'^[^ \n]*$', """Welcome toStackoverflow""")
# None
print re.match(r'^[^ \n]*$', """Welcome
toStackoverflow""")
# None

请注意,它不会消除所有其他空格字符,例如制表符,换行符等

print re.match(r'^[^ \n]*$', """Welcome\ttoStackoverflow""")
# <_sre.SRE_Match object at 0x7f77a2a58238>

因此,如果要排除所有空白字符,则可以使用

r'^[^\s]*$'

或者

r'^\S*$'

例如,

print re.match(r'^[^\s]*$', """WelcometoStackoverflow""")
# <_sre.SRE_Match object at 0x7f9146c8b238>
print re.match(r'^[^\s]*$', """Welcome toStackoverflow""")
# None
print re.match(r'^[^\s]*$', """Welcome
toStackoverflow""")
# None
print re.match(r'^[^\s]*$', """Welcome\ttoStackoverflow""")
# None

\S[^\s]相同。引自文档,

  

\ S

     

如果未指定UNICODE标志,则它与任何空白字符匹配,这相当于集合[ \t\n\r\f\v]LOCALE标志对空间的匹配没有额外的影响。如果设置了UNICODE,则这将匹配字符[ \t\n\r\f\v]以及Unicode字符属性数据库中分类为空格的任何内容。

     

\ S

     

如果未指定UNICODE标志,则匹配任何非空白字符;这相当于set [^ \t\n\r\f\v] LOCALE标志对非空白匹配没有额外影响。如果设置了UNICODE,则匹配Unicode字符属性数据库中未标记为空格的任何字符。

答案 2 :(得分:0)

试试这个

[^\s]+

\s 是空格的简写,即空格 ( )、换行符 (\n)、制表符 (\t)。