r - 在空格处拆分 R 字符串,但在空格位于单引号之间时不拆分
问题描述
我有一组丑陋而复杂的字符串,我必须拆分:
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'
and '02'
while#'autres 32' #'batiment 30'
会变成#'autres 32'
and #'batiment 30'
。
我试图从这个问题中获得灵感,但没有走远:
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)
细节
'[^']*'(*SKIP)(*F)
- ,然后是除(see ) 和 then'
之外的任何 0+ 字符,然后丢弃此匹配的文本,并从当前匹配失败的位置开始搜索下一个匹配项 (see )'
[^']*
'
(*SKIP)(*F)
|
- 或者\s+
- 1+ 空白字符。
由于它是 PCRE 模式,因此perl=TRUE
是强制性的。
推荐阅读
- p5.js - 我将如何检查日期之间的天数
- sockets - 当客户端和服务器在通过 P2P 连接连接的不同机器上运行时如何配置 UDP 端点
- python - 如何在python中反转for循环并从左到右打印元素
- ios - 使用自定义格式化程序应用字符串后缀
- wso2 - WSO2 Micro Integrator 7.X 中的管理服务(迁移到新的 WSO2 Micro Integrator 7.X)
- javascript - 在同一个元素中执行函数
- c - 通过释放整个对象来释放linked_list的节点
- r - 将长数据集与宽数据集合并
- javascript - 如何在 ReactJS 的 Reducer 中更新 redux 状态?
- html - 每当使用react在github api json文件中提交表单时,是否有任何选项可以保存数据