假设我有一个字符串:
x <- "This is a string (Yay, string!)"
我想解析字符串并返回“Yay,string!”
我该怎么做?
我尝试了一堆grep / grepl / gsub / sub / etc但是找不到正确的正则表达式或参数组合。叹。我需要研究正则表达式技巧。
答案 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!"