7

假设我有一个字符串:

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

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

我怎么做?

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

4

3 回答 3

9

这里有两种方法:

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

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

这有效,因为:

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

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

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

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

于 2012-09-10T21:31:18.400 回答
5

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

x <- "This is (a) string (Yay, string!)" 
pat <- "(?<=\\()([^()]*)(?=\\))"
regmatches(x, gregexpr(pat, x, perl=TRUE))
# [[1]]
# [1] "a"            "Yay, string!"
于 2012-09-10T22:01:32.367 回答
3

qdap 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 可能有点矫枉过正。

编辑:以乔希的例子......

> x <- "This is (a) string (Yay, string!)" 
> bracketX(x)
[1] "This is string"
> bracketXtract(x)
[1] "a"            "Yay, string!"
于 2012-09-10T22:01:22.443 回答