如何用R替换多个位置的字符

时间:2017-03-23 23:12:02

标签: r string stringr

我试图用","分割数据帧。分隔符。但是,字符串的某些部分具有模式[0-9] [,] [0-9] {2},并且我希望仅替换内部的逗号,而不是孔模式,以便保留数字输入。 我试着用stringr解决,但是陷入了以下错误模式:

library(stringr)
string <- '"name: John","age: 27","height: 1,73", "weight: 78,30"'
str_replace_all(string, "[0-9][,][0-9]{2}", "[0-9][;][0-9]{2}")
[1] "\"name: John\",\"age: 27\",\"height: [0-9][;][0-9]{2}\", \"weight: 7[0-9][;][0-9]{2}\""

我知道可以通过位置替换来完成,但字符串太大了。 我很感激任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您需要在需要保留的模式部分周围使用捕获组,并且在替换模式中,请参考带有反向引用的子匹配:

> str_replace_all(string, "([0-9]),([0-9]{2})", "\\1;\\2")
[1] "\"name: John\",\"age: 27\",\"height: 1;73\", \"weight: 78;30\""

或者gsub可以使用相同的正则表达式:

> gsub("([0-9]),([0-9]{2})", "\\1;\\2", string)
[1] "\"name: John\",\"age: 27\",\"height: 1;73\", \"weight: 78;30\""

<强>详情:

  • ([0-9]) - 捕获第1组,其值在替换模式中使用\\1引用,匹配单个数字
  • , - 逗号
  • ([0-9]{2}) - 捕获第2组,其值在替换模式中使用\\2引用,匹配2位数。