提取由特殊符号(正则表达式)分隔的单词

时间:2014-12-01 20:11:14

标签: regex r

我有点像"John a11|a12|\n Ana a21|a22|\n Jake a31|a23|\n "的刺痛 我想使用正则表达式提取"|"分隔的所有部分。

所以我想要输出

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

想法如何创建正确的正则表达式,或者它只需要R中的一些函数?

3 个答案:

答案 0 :(得分: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"      ""

答案 1 :(得分: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"  

答案 2 :(得分: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