在空白之后,R gsub一切

时间:2015-08-22 13:45:12

标签: regex r gsub

我正在努力弄清楚如何gsub在第一个小时值的“空白”之后的所有内容。

as.data.frame(valeur)

         valeur
1    8:01 8:15 
2  17:46 18:00 
3          <NA>
4          <NA>
5          <NA>
6          <NA>
7    8:01 8:15 
8  17:46 18:00 

我需要的是

     valeur
1          8:01
2         17:46
3          <NA>
4          <NA>
5          <NA>
6          <NA>
7          8:01
8         17:46

有任何线索吗?

我试过

 gsub("[:blank:].*$","",valeur)

几乎

valeur = c(" 8:01 8:15 ", " 17:46 18:00 ", NA, NA, NA, NA, " 8:01 8:15 ", 
" 17:46 18:00 ")

2 个答案:

答案 0 :(得分:4)

我猜你已经领先于&#39; valeur&#39;输出。我们可以删除那些gsub的人。我们匹配字符串(^\\s+)末尾的字符串(|)或(\\s+$)空格开头的一个或多个空格,替换为''

valeur1 <- gsub('^\\s+|\\s+$', '', valeur)

如果我们需要第一个非空格字符,我们会将空格(\\s+)后跟非空格(\\S+)匹配到字符串的末尾,并替换为''

sub('\\s+\\S+$', '', valeur1)
#[1] "8:01"  "17:46" NA      NA      NA      NA      "8:01"  "17:46"

要获取最后一个非空格字符,请使用sub匹配字符串开头不是空格(\\S+)的一个或多个字符(&#39; ^&# 39;)后跟一个或多个空格(\\s+)并将其替换为''以获取最后一个非空格字符。

sub('^\\S+\\s+', '', valeur1)
#[1] "8:15"  "18:00" NA      NA      NA      NA      "8:15"  "18:00"

以上操作可以在一个步骤中完成,我们在开头(^\\s*)或(|)匹配一个或多个空格(\\s+)后跟随零个或多个空格通过一个或多个非空格字符(\\S+),后跟零或多个空格字符(\\s*$),并替换为''

 gsub("^\\s*|\\s+\\S+\\s*$","",valeur)
 #[1] "8:01"  "17:46" NA      NA      NA      NA      "8:01"  "17:46"

或其他选项stri_extract_firststri_extract_last来自library(stringi),我们会在开头或结尾处匹配一个或多个非空格字符。

 library(stringi)
 stri_extract_first(valeur, regex='\\S+')
 #[1] "8:01"  "17:46" NA      NA      NA      NA      "8:01"  "17:46"

对于last非空格字符

 stri_extract_last(valeur, regex='\\S+')
 #[1] "8:15"  "18:00" NA      NA      NA      NA      "8:15"  "18:00"

答案 1 :(得分:2)

为了贡献,只想到:

substr(x = valeur, start = 2, stop = 6)
[1] "8:01 " "17:46" NA      NA      NA      NA      "8:01 " "17:46"