gsub / regex:删除因子变量中的开始和结束特殊字符

时间:2015-12-10 14:17:56

标签: regex r string character gsub

我正在使用以下向量:

vec <- c("[0.81, 1]", "0.00 - 0.03", "0.04 - 0.27",  "0.28 - 0.5",  "0.51 - 0.8")

我有兴趣修改值&#34; [0.81,1]&#34; 中的值,因此它对应的格式为数字 - 数字

工作解决方案

目前,我以下列方式解决了这一要求:

vec <- gsub("\\[", "", vec, perl = TRUE)
vec <- gsub("\\]", "", vec, perl = TRUE)
vec <- gsub(",", " - ", vec, fixed = TRUE)

代码产生了所需的要求:

> vec
[1] "0.81 -  1"   "0.00 - 0.03" "0.04 - 0.27" "0.28 - 0.5"  "0.51 - 0.8" 

问题

我希望使用更复杂的gsub来实现我的解决方案regex。我想提出regex语法:

  • 首先匹配 [和最后] 并删除它们/替换它们
  • 或者甚至更好,删除 [] 并签名并插入 - 而不是在中间。我猜这可能涉及使用gsubfn,因此我对此解决方案不太热衷

原则上我希望减少gsub来电的数量。

的尝试

我尝试过类似的东西:

  • \[(?![[:alnum:]])\] - 它不匹配任何内容
  • \[(.*)\] - 似乎与整个事情匹配

我想要实现的目标:

  1. 将前两个gsub来电合并为一个
  2. 如果可能,将所有3个电话合并为一个

2 个答案:

答案 0 :(得分:3)

使用这样的捕获组:

sub("\\[(.*), (.*)\\]", "\\1 - \\2", vec)
## [1] "0.81 - 1"    "0.00 - 0.03" "0.04 - 0.27" "0.28 - 0.5"  "0.51 - 0.8"

以下是使用的正则表达式的可视化:

\[(.*), (.*)\]

Regular expression visualization

Debuggex Demo

答案 1 :(得分:1)

它不是一个正则表达式,也许一个regexpert会给出一个,但我将前两个调用与第二个调用结合起来:

v1 <- gsub("\\[|\\]","",gsub(","," -",vec))

请注意,我用&#34; - &#34;,而不是&#34; - &#34;因为你的逗号后面已经有空格了。