假设我有一个字符串:
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!"