gpt4 book ai didi

r - 在空格处拆分 R 字符串,但在空格位于单引号之间时不拆分

转载 作者:行者123 更新时间:2023-12-04 02:38:02 25 4
gpt4 key购买 nike

我有一组丑陋而复杂的字符串,我必须拆分它们:

vec <- c("'01'", "'01' '02'", 
"#bateau", "#bateau #batiment",
"#'autres 32'", "#'autres 32' #'batiment 30'", "#'autres 32' #'batiment 30' #'contenu 31'",
"#'34'", "#'34' #'33' #'35'")
vec
[1] "'01'" "'01' '02'"
[3] "#bateau" "#bateau #batiment"
[5] "#'autres 32'" "#'autres 32' #'batiment 30'"
[7] "#'autres 32' #'batiment 30' #'contenu 31'" "#'34'"
[9] "#'34' #'33' #'35'"

我需要在有空格 () 的地方拆分字符串,除非空格位于 ' 之间。因此在上面的示例中,'01' '02' 将变为 '01''02'#'autres 32 '#'batiment 30' 将变为 #'autres 32'#'batiment 30'

我尝试从 this question 中获得灵感, 但没走多远:

strsplit(vec, "(\\s[^']+?)('.*?'|$)")

因为这个解决方案分割了一些不应该的空间,也让我失去了一些信息。

拆分的结果应该是这样的:

res <- c("'01'", "'01'", "'02'", 
"#bateau", "#bateau", "#batiment",
"#'autres 32'", "#'autres 32'", "#'batiment 30'", "#'autres 32'", "#'batiment 30'", "#'contenu 31'",
"#'34'", "#'34'", "#'33'", "#'35'")

分割这个字符串的正确正则表达式是什么?

谢谢

最佳答案

你可以使用

strsplit(vec, "'[^']*'(*SKIP)(*F)|\\s+", perl=TRUE)

参见 R demoregex demo在线。

详情

  • '[^']*'(*SKIP)(*F) - ',然后是除 ' 之外的任何 0+ 个字符(see [^']*) 然后是 ',然后丢弃这个匹配的文本,从当前匹配失败的位置开始搜索下一个匹配 (参见 (*SKIP)(*F) )
  • | - 或者
  • \s+ - 1+ 个空白字符。

因为它是一个 PCRE 模式,所以 perl=TRUE 是必须的。

关于r - 在空格处拆分 R 字符串,但在空格位于单引号之间时不拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60739842/

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