【发布时间】:2014-02-20 10:06:36
【问题描述】:
我想在右边第三个空白处拆分一系列字符串。空格的数量因字符串而异,但每个字符串至少有三个空格。这是两个示例字符串。
strings <- c('abca eagh ijkl mnop', 'dd1 ss j, ll bb aa')
我想要:
[1] 'abca', 'eagh ijkl mnop'
[2] 'dd1 ss j,', 'll bb aa'
我最接近的是:
strsplit(strings, split = "(?<=\\S)(?=\\s(.*)\\s(.*)\\s(.*)$)", perl = TRUE)
返回:
[[1]]
[1] "abca" " eagh" " ijkl mnop"
[[2]]
[1] "dd1" " ss" " j," " ll bb aa"
我一直认为答案应该是这样的:
strsplit(strings, split = "(?<=\\S\\s(.*)\\s(.*)\\s(.*)$)(?=\\s(.*)\\s(.*)\\s(.*)$)", perl = TRUE)
但是,这会返回错误。谢谢你的任何建议。我更喜欢基本的解决方案,希望是使用正则表达式的解决方案。
【问题讨论】:
-
你可以反转你的字符串,然后在左边第三个空格处拆分反转的字符串(这可能更容易!),然后反转每个子字符串?
-
第一个例子
abca eagh{SPACE}{SPACE}{SPACE}ijkl{SPACE}mnop不应该根据你的要求给你'abca eagh',' ijkl mnop'吗? -
@JonM 也许我没有正确使用“空白”一词。对于那个很抱歉。我已经包含了字符串和所需的结果。
-
那么连续的空格是否应该被视为“一个”空格(例如,一行中的 5 个空格应计为一个空格)?
-
是的,连续 5 个空格被视为一个空格。