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

Mar*_*ler 6 regex string r gsub

我正在使用文本格式读取数据文件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
Run Code Online (Sandbox Code Playgroud)

我试过这里提供的代码:

在字符串中的第一个逗号上拆分

和这里:

R:从字符串中删除最后三个点

上面第一个链接的代码似乎只在第一行的第一个冒号处分开.第二个链接的代码可能会做我想要的,但对我来说太复杂到目前为止无法成功修改它.

这是我希望获得的数据,此时我可以使用一个非常简单的gsub语句简单地用空格替换第一行中剩余的冒号:

   aa : bb : cc 
    2    0    2
    7    6    5
    4    2    3
Run Code Online (Sandbox Code Playgroud)

很抱歉,如果这是我未找到的帖子的副本,感谢您提供任何建议或帮助.

Das*_*son 15

以下将从字符串的开头开始,然后抓取所有内容,包括第一个冒号和任何其他空格,并将其替换为空(基本上只是删除它)

gsub("^[^:]+:\\s*", "", my.data2)
Run Code Online (Sandbox Code Playgroud)

如果您不想删除可以执行的空格

gsub("^[^:]+:", "", my.data2)
Run Code Online (Sandbox Code Playgroud)

有关原始正则表达式正在做什么的一些说明.从头开始:

^ 这说只能在字符串的开头找到匹配项

[^:] 这表示任何不是冒号的字符

+ 这表示匹配前面的字符一次或多次(因此匹配尽可能多的非冒号字符)

: 这实际上与冒号相匹配

\\s 这与空间相匹配

* 这表示匹配前面的字符零次或多次(所以我们删除冒号后的任何额外空格)

所以把它们放在一起我们从字符串的开头开始然后匹配尽可能多的非冒号字符然后抓住第一个冒号字符和任何其他空格并用什么都不替换所有这些(基本上删除所有垃圾我们不要我想).