假设我有一个字符串:
x <- "This is a string (Yay, string!)"
我想解析字符串并返回“耶,字符串!”
我怎么做?
我尝试了一堆 grep/grepl/gsub/sub/etc 但找不到正则表达式或参数的正确组合。叹。我需要学习正则表达式技能。
假设我有一个字符串:
x <- "This is a string (Yay, string!)"
我想解析字符串并返回“耶,字符串!”
我怎么做?
我尝试了一堆 grep/grepl/gsub/sub/etc 但找不到正则表达式或参数的正确组合。叹。我需要学习正则表达式技能。
这里有两种方法:
一:找到你想要的字符串,用找到的位替换整个字符串。(称为反向引用)
gsub(".*\\((.*)\\).*", "\\1", x)
[1] "Yay, string!"
这有效,因为:
\\1
来引用括号中的匹配字符串(.*)
\\(
and转义这些括号\\)
。二:用空字符串替换所有不需要的位:
gsub(".*\\(|\\).*", "", x)
[1] "Yay, string!"
这是有效的,因为其|
行为类似于OR
.
此外,如果您的某些字符串可能包含几个带括号的子字符串,您想要提取所有这些子字符串,请使用正则表达式电动工具gregexpr()
和regmatches()
:
x <- "This is (a) string (Yay, string!)"
pat <- "(?<=\\()([^()]*)(?=\\))"
regmatches(x, gregexpr(pat, x, perl=TRUE))
# [[1]]
# [1] "a" "Yay, string!"
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!"