2017-05-23 33 views
2

我想读R中的csv文件。 向我发送文件的可怕的人包括包含逗号的列名。幸运的是,这些逗号包括名字总是保持在括号[]之间。如何在R中的两个字符之间发生变化?

我很确定在Stack中有类似的问题,但是我一直无法找到它。 我应该用什么正则表达式来摆脱这些逗号?

名称的字符串如下面的namestring,我想获得类似outstring(使用_或任何其他符号)。

namestring="V1,V2,V3[1,5m/s2],V4,V5,V6[12,23mm]" 
outstring="V1,V2,V3[1_5m/s2],V4,,V6[12_23mm]" 
+0

是否有其他种类的逃避或嵌套发生的可能性?名称中总是最多有1个逗号,还是可以有更多? –

+0

在我的特殊情况下,只能有一个逗号。如果有不止一个,我想我会执行akrun提供的解决方案,直到逗号不会减少,因为我必须解析的字符串不会太长。无论如何,我远不是正则表达式的专家。 –

回答

1

假设我们要删除的括号内的,

gsub("\\[([^,]*),", "[\\1_", namestring) 
#[1] "V1,V2,V3[1_5m/s2],V4,V5,V6[12_23mm]" 
+2

如果有一个方括号不包含逗号,该怎么办? – G5W

+1

非常感谢,它完全符合我的需求。 @ G5W,如果没有包括逗号,括号保持不变。 I.E. gsub(“\\ [([^,] *),”,“[\\ 1_”,“[] [,]”) –

+1

多个逗号怎么办? 'gsub('(?:\\ G(?!^)| [^ [] * \\ [] [^],] * \\ K,','_',x,perl = TRUE)' – hwnd

相关问题