2014-12-01 18 views
0

我有一些像"John a11|a12|\n Ana a21|a22|\n Jake a31|a23|\n " 我想提取使用正則表達式由"|"分隔的所有部分。提取由特殊符號分隔的單詞(正則表達式)

所以我想輸出

"John a11" "a12" "Ana a21" "a22" "Jake a31" "a23"

而且想法如何才能創建正確的正則表達式也許它需要只是一些功能中的R?

+0

使用'strsplit()' – Andrie 2014-12-01 20:14:38

回答

6

嘗試使用strsplit()與拆分正則表達式"[\\||\n] *"

x <- "John a11|a12|\n Ana a21|a22|\n Jake a31|a23|\n " 

strsplit(x, split="[\\||\n] *")[[1]] 
[1] "John a11" "a12"  ""   "Ana a21" "a22"  ""   "Jake a31" "a23"  "" 
+0

有關準確期望的結果:'strsplit(X, 「[|] |(\\ | \ n)的」)[[1]]' – 2014-12-01 20:59:11

+0

甚至更​​的更精確:' strsplit(x,「* [|] |(\\ | \ n)*」)[[1]]' – stanekam 2014-12-01 21:20:04

1

或者使用rex可能使這種類型的任務更簡單一點的。

x <- "John a11|a12|\n Ana a21|a22|\n Jake a31|a23|\n " 

library(rex)  
re_matches(x, 
    rex(
     any_spaces, 
     capture(name = 'text', 
     except_some_of("|") 
    ), 
     any_spaces), 
    global = TRUE)[[1]] 
#>  text 
#>1 John a11 
#>2  a12 
#>3 Ana a21 
#>4  a22 
#>5 Jake a31 
#>6  a23 
#>7 
+4

我猜你是'rex'包的作者? – stanekam 2014-12-01 21:17:41

3

您可以分割上|,使新行序列可選,其次是「零個或多個」空間。

x <- 'John a11|a12|\n Ana a21|a22|\n Jake a31|a23|\n ' 
strsplit(x, '\\|\n? *')[[1]] 
# [1] "John a11" "a12"  "Ana a21" "a22"  "Jake a31" "a23"