R正则表达式:用更具体的信息替换整个字符串列表

时间:2014-04-13 21:21:37

标签: regex r stringr

如果我的数据包含具有"Q7", "Q2"等元素的分类变量,如何将其替换为"7 Queen", "2 Queen"等?

2 个答案:

答案 0 :(得分:0)

Regex

(Q)(\d)

替换正则表达式

$2 Queen

Regular expression visualization

Debuggex Demo

<强>描述

1st Capturing group (Q)
    Q matches the character Q literally (case insensitive)
2nd Capturing group (\d)
    \d match a digit [0-9]
g modifier: global. All matches (don't return on first match)
i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z])

注意: 每个字母都需要其中一个

答案 1 :(得分:0)

首先,如果您还包含已经尝试过的代码,那么您将充分利用问题。那说......

对于大型数据集来说,解决此问题的方法可能不是最有效的方法,但这两种方法似乎在您的示例中运行得很好。 example(strsplit)有一个很好的字符串反转函数,我们可以使用它。

> strReverse <- function(x)
      sapply(lapply(strsplit(x, NULL), rev), paste, collapse = "")

> strg <- c("Q7", "Q2")
> GS <- gsub("Q", strReverse(" Queen"), strg)
> strReverse(GS)
[1] "7 Queen" "2 Queen"

另一种方法是使用paste

> S <- paste0(strReverse(strg), "ueen")
> gsub("Q", " Q", S)
[1] "7 Queen" "2 Queen"