使用R解析并返回括号中的文本

时间:2012-09-10 21:28:14

标签: r

假设我有一个字符串:

x <- "This is a string (Yay, string!)" 

我想解析字符串并返回“Yay,string!”

我该怎么做?

我尝试了一堆grep / grepl / gsub / sub / etc但是找不到正确的正则表达式或参数组合。叹。我需要研究正则表达式技巧。

3 个答案:

答案 0 :(得分:9)

以下是两种方法:

一个:找到您想要的字符串,并将整个字符串替换为找到的位。 (称为反向引用)

gsub(".*\\((.*)\\).*", "\\1", x)
[1] "Yay, string!"

这是因为:

  • 您使用反向引用\\1来引用括号中的匹配字符串(.*)
  • 由于您要在实际字符串中排除括号,因此您需要使用\\(\\)转义这些括号。

二:用空字符串替换所有不想要的位:

gsub(".*\\(|\\).*", "", x)
[1] "Yay, string!"

这是有效的,因为|的行为类似于OR

答案 1 :(得分:5)

此外,如果您的某些字符串可能包含多个带括号的子字符串(您要提取所有这些字符串),请使用正则表达式强力工具gregexpr()regmatches()

x <- "This is (a) string (Yay, string!)" 
pat <- "(?<=\\()([^()]*)(?=\\))"
regmatches(x, gregexpr(pat, x, perl=TRUE))
# [[1]]
# [1] "a"            "Yay, string!"

答案 2 :(得分:3)

qdap version 1.1.0可以做到这一点:

library(qdap)
x <- "This is a string (Yay, string!)" 

bracketX(x)
bracketXtract(x)

收率:

> bracketX(x)
[1] "This is a string"
> bracketXtract(x)
[1] "Yay, string!"

虽然如果你没有做太多这样的事情,那么获得qdap可能有点矫枉过正。

编辑:用Josh的例子......

> x <- "This is (a) string (Yay, string!)" 
> bracketX(x)
[1] "This is string"
> bracketXtract(x)
[1] "a"            "Yay, string!"