我试图用","分割数据帧。分隔符。但是,字符串的某些部分具有模式[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}\""
我知道可以通过位置替换来完成,但字符串太大了。 我很感激任何帮助。提前谢谢。
答案 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位数。