2016-03-01 153 views

回答

4

没有正则表达式,你可以使用

which(nchar(trimws(vec))==0) 

功能trimws()消除拖尾和字符串中的前导空格字符。因此,如果在使用trimws后,字符串的长度(由nchar()确定)不为零,则该字符串至少包含一个非空白字符。

实施例:

vec <- c(" ", "", " "," a ", "    ", "b") 
which(nchar(trimws(vec))==0) 
#[1] 1 2 3 5 

中的条目1,2,3,和5中的矢量vec的或者是空的,或者只包含空白字符。在布尔值的向量前者的结果,后者在:


如理查德斯克里芬建议的,可以不调用nchar(),通过简单地使用trimws(vec)==""(或which(trimws(vec)==""),这取决于所需的输出所获得的相同的结果空白/空条目的索引号)。

5

您可以grepl尝试:

grepl("^\\s*$", your_string) 

"^\\s*$"请求开始(^)和字符串的结尾($)之间的0个或多个(*)空间(\\s)。

例子

grepl("^\\s*$", " ") 
#[1] TRUE 
grepl("^\\s*$", "") 
#[1] TRUE 
grepl("^\\s*$", " ") 
#[1] TRUE 
grepl("^\\s*$", " ab") 
[1] FALSE 

注:您也可以只用一个空格代替\\s在正则表达式("^\\s*$")。

+0

更好的正则表达式会是 'grepl(“\\ s +”,your_string,perl = True)'+强制它匹配1个空格。 – Seekheart

+3

@Seekheart它实际上是为什么我首选'*',所以它也检查空字符串,我认为OP可能还想要空字符串被发现(并进一步修改为“NA”)(顺便说一句,你的不会工作没有指定字符串的开始和结束,你不需要使用perl选项,TRUE必须使用大写字母;-)) – Cath

相关问题