2016-12-25 4 views
4

長い文字列を分割する必要があります。分割が行われるべき場所は、それらが日付の後に続くという事実を除いては共通点がない。したがって、私は特定のパターン、すなわちdd/mm/yyyy, hh:mmの出現に基づいて文字列を分割する必要があります。私は関数strsplitと連合した文字列マニピュレータを知っていますが、それらは役に立たないようです。データのサンプルは以下の通りです。分割単位の一般的な形式に基づいて文字列を分割する方法はありますか?

25/06/15, 21:37 - kjadshjabsdjab 
25/06/15, 21:39 - bsadhi2342/342jbjsd 
25/06/15, 21:40 -hkgsad/213/1sadjaa 
25/06/15, 21:41 - hsdjhakhjbk12/21s/sda:sdfjbj 
25/06/15, 21:42 - jkadbsh2:/\sdsadjv 
25/06/15, 21:42 - 

答えて

3

我々は日付を使用しない場合、我々は、同様

strsplit(str1, "(?<=[0-9]{2}/[0-9]{2}/[0-9]{2}, [0-9]{2}:[0-9]{2})", perl = TRUE) 

'日' を含める必要がある場合我々は

strsplit(str1, "(?<=[0-9]{2}:[0-9]{2})", perl = TRUE) 

を分割するために正規表現前後参照を使用することができます時間、次に

setdiff(strsplit(str1, "[0-9]{2}/[0-9]{2}/[0-9]{2}, [0-9]{2}:[0-9]{2}\\s*-\\s*")[[1]], "") 
#[1] "kjadshjabsdjab"    "bsadhi2342/342jbjsd" 
#[3] "hkgsad/213/1sadjaa"   "hsdjhakhjbk12/21s/sda:sdfjbj" 
#[5] "jkadbsh2:/\\sdsadjv" 
1

" - "で分割し、最後の15文字を除外できます。あなたが正規表現を変更したり、それが必要ない場合は離れ-をサブ+変異させることができ

> ss = "25/06/15, 21:37 - kjadshjabsdjab25/06/15, 21:39 - bsadhi2342/342jbjsd25/06/15, 21:40 - hkgsad/213/1sadjaa25/06/15, 21:41 - hsdjhakhjbk12/21s/sda:sdfjbj25/06/15, 21:42 - jkadbsh2:sdsadjv25/06/15, 21:42 -" 
> 
> sapply(strsplit(ss, " - "), function(x) substr(x, 1, nchar(x)-15)) 
    [,1]       
[1,] ""        
[2,] "kjadshjabsdjab"    
[3,] "bsadhi2342/342jbjsd"   
[4,] "hkgsad/213/1sadjaa"   
[5,] "hsdjhakhjbk12/21s/sda:sdfjbj" 
[6,] "jkadbsh2:sdsadjv25"   
2

:関数sapplyは、リストの各項目にSUBSTR関数を適用するために使用することができます

library(stringi) 
library(purrr) 

lines <- readLines(textConnection('25/06/15, 21:37 - kjadshjabsdjab\n25/06/15, 21:39 - bsadhi2342/342jbjsd\n25/06/15, 21:40 -hkgsad/213/1sadjaa\n25/06/15, 21:41 - hsdjhakhjbk12/21s/sda:sdfjbj\n25/06/15, 21:42 - jkadbsh2:/\\sdsadjv\n25/06/15, 21:42 -')) 

stri_match_all_regex(lines, "([[:digit:]]{2}/[[:digit:]]{2}/[[:digit:]]{2}, [[:digit:]]{2}:[[:digit:]]{2})(.*)") %>% 
    map_df(~setNames(as.list(.[,2:3]), c("ts", "string"))) 
## # A tibble: 6 × 2 
##    ts       string 
##    <chr>       <chr> 
## 1 25/06/15, 21:37    - kjadshjabsdjab 
## 2 25/06/15, 21:39   - bsadhi2342/342jbjsd 
## 3 25/06/15, 21:40    -hkgsad/213/1sadjaa 
## 4 25/06/15, 21:41 - hsdjhakhjbk12/21s/sda:sdfjbj 
## 5 25/06/15, 21:42   - jkadbsh2:/\\sdsadjv 
## 6 25/06/15, 21:42        - 
関連する問題