在非空格字符上测试字符串内容

4
我想测试一句话中是否包含除空格字符以外的任何内容。目前我使用的是以下代码:
if len(teststring.split()) > 0:
    # contains something else than white space
else:
   # only white space

这样做可以吗?是否有更好的方法?


6
' \t\n\v\f '.isspace()。完成 - JBernardo
4个回答

14

字符串有一个叫做str.isspace的方法,根据文档:

如果字符串中只有空格字符并且至少有一个字符,则返回true,否则返回false。

所以,那意味着:

if teststring.isspace():
    # contains only whitespace

会做你想要的事情。


1
all(c.isspace() for c in teststring) - 稍微简短一点 :) - Aleksei astynax Pirogov
6
不需要理解:' \t\n\v\f '.isspace()的意思是判断字符串中是否只包含空格、制表符、换行符、垂直制表符和换页符,如果是,则返回True,否则返回False。 - JBernardo
2
@JBernardo:有趣的是,这里列出的所有答案中最好的答案是你的评论 ;) - Tadeck

7
我会使用strip()函数来实现这个目的。
  if teststring.strip():
      # non blank line
  else:
      # blank line

@astynax,你是在提出风格建议,还是我的语法/解决方案有问题?我因为这个被踩了吗?(只是问一下..因为我看不出来) - Levon
@astynax 如果您建议的if语句替换到我上面的代码中,会得到相反(即错误)的结果。据我所知,我的解决方案是可行的。 - Levon
为什么要点踩?我很乐意纠正任何错误或改进答案,但这需要一些建设性的反馈。没有解释的点踩对 OP、SO 或我来说都没有用。 - Levon
1
你当然是对的:if teststring.strip():。-1:检查字符串是否为空比与空字符串进行比较更加简洁(并且稍微更快)。请参阅真值测试 - Aleksei astynax Pirogov
@astynax 好的,谢谢,我会接受功能/正确的建议(我同意它看起来更清晰),尽管我最初发布的是正确的。就我个人而言,我永远不会因为与他人的风格差异而对功能性解决方案进行负面评价。 - Levon
1
+1给你。我为我的负投票道歉。我只是认为Python有很多风格指南,足以感受到“Pythonic way”。 - Aleksei astynax Pirogov

2
你可以使用 .strip() 方法。
如果字符串只包含空格,则结果为空字符串。
if teststring.strip():
    # has something other than whitespace.
else:
    # only whitespace

或者像JBernardo指出的那样更明确地表达:

if not teststring.isspace():
    # has something other than whitespace

else:
    # only whitespace.

1
 if teststring.split():
      print "not only whitespace!" 
 else:
     print ":("

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接