在第一个冒号处拆分字符串

6
我正在使用readLines读取文本格式的数据文件。 第一列是我不需要的复杂文本。 接下来的几列包含我需要的数据。 第一列和数据之间用冒号(:)分隔。 我希望在第一个冒号处拆分每一行并删除结果文本字符串,只保留数据。
以下是数据文件的示例。 一个潜在的问题是一行数据包含多个冒号。 那一行可能会成为我的标题。 因此,我可能不应该在每个冒号处拆分,而只应在第一个冒号处拆分。
my.data <- "first string of text..:  aa : bb : cc 
            next string ........  :   2    0    2
            third string......1990:   7    6    5
            last string           :   4    2    3"

my.data2 <- readLines(textConnection(my.data))
my.data2

我已经尝试了这里提供的代码:在字符串中分割第一个逗号R:从字符串中删除最后三个点,但是第一个链接中的代码似乎只在第一行的第一个冒号处进行分割。第二个链接中的代码可能会做我想要的事情,但是对于我来说太复杂了,以至于无法成功修改它。
以下是我希望获得的数据,此时我可以使用非常简单的gsub语句将第一行中剩余的冒号替换为空格:
   aa : bb : cc 
    2    0    2
    7    6    5
    4    2    3

如果这是我没有找到的帖子的重复,请原谅,感谢您提供任何建议或帮助。

1个回答

15
以下内容将从字符串开头开始,并获取所有直到第一个冒号及任何附加空格的内容,并将其替换为空(即只是将其删除)。
gsub("^[^:]+:\\s*", "", my.data2)

如果您不想去除空格,您可以这样做:

gsub("^[^:]+:", "", my.data2)
为了澄清原始正则表达式的含义。从开头开始: ^ 表示只在字符串开头查找匹配项 [^:] 代表除冒号以外的任何字符 + 表示匹配前面的字符一次或多次(因此尽可能匹配尽可能多的非冒号字符) : 实际匹配冒号 \\s 匹配空格 * 表示匹配前面的字符零次或多次(因此我们删除冒号后的任何额外空格)
将所有内容组合起来,我们从字符串开头开始,然后匹配尽可能多的非冒号字符,然后获取第一个冒号字符和任何额外空格,并将所有这些内容替换为空(实质上删除我们不想要的所有垃圾)。

感谢您的回答和出色的解释。 - Mark Miller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接