2016-03-01 45 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

相關問題