Regex 无法使用R中的gsub将字符串替换为反向引用

Regex 无法使用R中的gsub将字符串替换为反向引用,regex,r,Regex,R,我试图用R中的正则表达式替换字符向量中的一些文本,其中,如果括号内有一组字母,括号内容将替换整个内容。因此,考虑到输入: tst <- c("85", "86 (TBA)", "87 (LAST)") tst 您可以尝试此操作。请参阅演示。替换为\1 我想你想要 gsub(".*\\(([[:alpha:]]+)\\)", "\\1", tst) # [1] "85" "TBA" "LAST" 您的第一个表达式试图精确匹配一个alpha字符,而不是一个或多个。我还添加了“*”以捕

我试图用R中的正则表达式替换字符向量中的一些文本,其中,如果括号内有一组字母,括号内容将替换整个内容。因此,考虑到输入:

tst <- c("85", "86 (TBA)", "87 (LAST)")
tst
您可以尝试此操作。请参阅演示。替换为
\1

我想你想要

gsub(".*\\(([[:alpha:]]+)\\)", "\\1", tst)
# [1] "85"   "TBA"  "LAST"

您的第一个表达式试图精确匹配一个alpha字符,而不是一个或多个。我还添加了“*”以捕获字符串的开头部分,这样它也会被替换,否则,它将保持不变。

以下操作可以正常工作。请注意,括号内的空白可能有问题

A<-sapply(strsplit(tst," "),tail,1)
B<-gsub("\\(|\\)", "", A)

A我更喜欢纯正则表达式的答案。我正在展示一个使用我维护的qdapRegex包的解决方案,结果非常快速,易于记忆和推广。它拉出括号中的字符串,然后用原始值替换任何
NA
(无括号)。请注意,结果是一个列表,您需要使用
unlist
来匹配所需的输出

library(qdpRegex)
m <- rm_round(tst, extract=TRUE)
m[is.na(m)] <- tst[is.na(m)]

## [[1]]
## [1] "85"
## 
## [[2]]
## [1] "TBA"
## 
## [[3]]
## [1] "LAST"
库(qdpRegex)

我感谢你;不幸的是,我甚至不能开始了解如何将其转换为R。顺便说一句,我假设此模式搜索括号内的任何内容?我试着只限定那些只有括号中字母的。
library(qdpRegex)
m <- rm_round(tst, extract=TRUE)
m[is.na(m)] <- tst[is.na(m)]

## [[1]]
## [1] "85"
## 
## [[2]]
## [1] "TBA"
## 
## [[3]]
## [1] "LAST"