gpt4 book ai didi

regex - 在第一个冒号处分割字符串

转载 作者:行者123 更新时间:2023-12-02 18:21:36 27 4
gpt4 key购买 nike

我正在使用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

我已经尝试过这里提供的代码:

Split on first comma in string

这里:

R: removing the last three dots from a string

上面第一个链接的代码似乎仅在第一行的第一个冒号处分割。第二个链接中的代码可能会执行我想要的操作,但对于我来说太复杂了,到目前为止无法成功修改它。

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

   aa : bb : cc 
2 0 2
7 6 5
4 2 3

抱歉,如果这是我未找到的帖子的重复内容,感谢您的任何建议或帮助。

最佳答案

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

gsub("^[^:]+:\\s*", "", my.data2)

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

gsub("^[^:]+:", "", my.data2)
<小时/>

对原始正则表达式的作用进行一些澄清。从头开始:

^ 这表示仅在字符串开头查找匹配

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

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

: 这是实际匹配冒号的内容

\\s 这与空格匹配

* 这表示匹配前面的字符零次或多次(因此我们删除冒号后面的任何附加空格)

因此,将它们放在一起,我们从字符串的开头开始,然后匹配尽可能多的非冒号字符,然后捕获第一个冒号字符和任何其他空格,然后将所有内容替换为空(本质上删除所有垃圾我们不想要)。

关于regex - 在第一个冒号处分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12233562/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com