R、regex中的引号和可选通配符有问题

R、regex中的引号和可选通配符有问题,r,regex,R,Regex,给定这个特征向量 columnsToKeep <- c("W","L","Customer Rate", "Diff% from Base", "StoreOcc%", "COMPPS","Avail","Days in Unit", "DSRC","Rec New Price", "Rec Rate Chg", "intScheduledMoveOuts","TI30","BR1Yr",

给定这个特征向量

columnsToKeep <- c("W","L","Customer Rate", "Diff% from Base",
               "StoreOcc%", "COMPPS","Avail","Days in Unit",
               "DSRC","Rec New Price", "Rec Rate Chg",
               "intScheduledMoveOuts","TI30","BR1Yr",
               "RLMI","NM7D","Last Rate Change %", "Occ%", 
               "Last Rate Change Amt", "BR", "MoveInRate",
               "newRate",
               "lengthOfStay", "mnyRentAtMoveIn", 
               "rentPriorToRateChange","mnyRentAtMoveOut","status")
但是我想要这个

`Customer Rate`+ `Diff% from Base`+ `Days in Unit`+ `Rec New Price`+ `Rec Rate Chg`+ `Last Rate Change %` + `Last Rate Change Amt`

显然,我很难为%符号提供正确的正则表达式。

我猜您只是在寻找单词之间至少包含一个空格的条目。您可以尝试一下:
“([\w%]+[\w%]+(?:[\w%]+)*?)”

看起来您只是试图匹配字母和
%
,因此使用
\w
可能有点危险(它还匹配
0-9
)。您可以更具体地使用
“([A-Za-z%]+[A-Za-z%]+(?:[A-Za-z%]+)*?”


另外,请注意,
\s
不仅仅意味着一个空格(
)。它是所有空白字符的集合,因此它也将匹配换行符、回车符和制表符。如果您想匹配一个空格,只需使用一个文本空格。

我不太确定您想用正则表达式做什么,但看起来您想在d中的每个名称周围加上反勾号,然后用+。实现这一目标的两种方法是:

cat(sapply(d, function(s) { paste0("`", s, "`") }), sep="+ ")


我根本不会使用正则表达式-只是将它粘贴在一起:
paste0(“`”,粘贴(columnsToKeep[grepl(“,columnsToKeep)],collapse=“+”),“`”)
`Customer Rate`+ `Diff% from Base`+ `Days in Unit`+ `Rec New Price`+ `Rec Rate Chg`+ `Last Rate Change %` + `Last Rate Change Amt`
cat(sapply(d, function(s) { paste0("`", s, "`") }), sep="+ ")
cat(gsub("$", "`", gsub("^", "`", d)), sep="+ ")