无法使用R中的gsub用反向引用替换字符串
Unable to replace string with back reference using gsub in R
我正在尝试使用 R 中的正则表达式替换字符向量中的一些文本,如果括号内有一组字母,则括号内容将替换整个内容。因此,给定输入:
tst <- c("85", "86 (TBA)", "87 (LAST)")
我想要的输出相当于 c("85", "TBA", "LAST")
我试过 gsub("\(([[:alpha:]])\)", "\1", tst)
但它没有替代任何东西。我需要在此处的正则表达式中更正什么?
gsub("(?=.*\([^)]*\)).*\(([^)]*)\)", "\1", tst, perl=TRUE)
## [1] "85" "TBA" "LAST"
您可以通过
尝试 this.See demo.Replace。
我想你想要
gsub(".*\(([[:alpha:]]+)\)", "\1", tst)
# [1] "85" "TBA" "LAST"
您的第一个表达式试图准确匹配一个字母字符,而不是一个或多个。我还添加了“.*”来捕获字符串的开头部分,以便它也被替换,否则,它将保持不变。
以下方法可行。请注意, 括号内的空格可能有问题
A<-sapply(strsplit(tst," "),tail,1)
B<-gsub("\(|\)", "", 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"
我正在尝试使用 R 中的正则表达式替换字符向量中的一些文本,如果括号内有一组字母,则括号内容将替换整个内容。因此,给定输入:
tst <- c("85", "86 (TBA)", "87 (LAST)")
我想要的输出相当于 c("85", "TBA", "LAST")
我试过 gsub("\(([[:alpha:]])\)", "\1", tst)
但它没有替代任何东西。我需要在此处的正则表达式中更正什么?
gsub("(?=.*\([^)]*\)).*\(([^)]*)\)", "\1", tst, perl=TRUE)
## [1] "85" "TBA" "LAST"
您可以通过 尝试 this.See demo.Replace。
我想你想要
gsub(".*\(([[:alpha:]]+)\)", "\1", tst)
# [1] "85" "TBA" "LAST"
您的第一个表达式试图准确匹配一个字母字符,而不是一个或多个。我还添加了“.*”来捕获字符串的开头部分,以便它也被替换,否则,它将保持不变。
以下方法可行。请注意, 括号内的空格可能有问题
A<-sapply(strsplit(tst," "),tail,1)
B<-gsub("\(|\)", "", 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"