gpt4 book ai didi

R Strsplit 将分隔符保留在第二个元素中

转载 作者:行者123 更新时间:2023-12-03 09:08:49 24 4
gpt4 key购买 nike

我已经尝试解决这个小问题近两个小时了,但没有成功。我只想用分隔符分隔字符串:一个空格后跟任何字符。在第二个元素中,我想保留分隔符,而在第一个元素中,它不应出现。示例:

 x <- "123123 123 A123"
strsplit(x," [A-Z]")

结果:

"123123 123" "A123"

但是,这不会将字母 A 保留在第二个元素中。我尝试过使用

strsplit(x,"(?<=[A-Z])",perl=T)

但这并不能真正解决我的问题。如果第二个元素中有空格,也没关系,只需要其中的字符即可。

最佳答案

如果您想遵循您的方法,则需要将后面的 1 个以上空格(即您需要先行查找)与一个字母匹配以消耗空格:

> strsplit(x,"\\s+(?=[A-Z])",perl=T)
[[1]]
[1] "123123 123" "A123"

请参阅PCRE regex demo .

详细信息:

  • \s+ - 1 个或多个空格(放入匹配值中,因此在分割过程中将被删除)
  • (?=[A-Z]) - 大写 ASCII 字母必须立即出现在当前位置的右侧,否则匹配失败(该字母不是匹配值的一部分,并且将保留在结果中)

您还可以匹配最后一个非空白字符,后跟 1 个以上的空格,并使用 \K 匹配重置运算符来丢弃空格之前的匹配:

> strsplit(x,"^.*\\S\\K\\s+",perl=T)
[[1]]
[1] "123123 123" "A123"

如果字符串包含换行符,请添加 DOTALL 标志,因为默认情况下 PCRE 正则表达式中的点与换行符不匹配:"(?s)^.*\\S\\K\\s+".

详细信息:

  • ^ - 字符串开头
  • .* - 任何 0+ 个字符,直到最后一次出现后续子模式(即 \S\s+)
  • \\S - 非空白
  • \\K - 在这里,删除到目前为止匹配的所有文本
  • \\s+ - 1 个或多个空格。

参见another PCRE regex demo .

关于R Strsplit 将分隔符保留在第二个元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44674503/

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