r - 如何从字符串中提取括号到新列中
问题描述
我需要将字符串中的信息导出到不同的列中。更具体地说,字符串中括号的内容;
假设我有一个字符串
a <- "2xExp [K89; K96]; 1xExp [N-Term]; 2xNum [S87(100); S93(100)]"
我试图输出的是一个带有括号内容的向量,如果有逗号将它们保存为单独的括号字符串,并删除括号。
例如
tmp <- function(a)
结果
tmp
"[K89]" , "[K96]", "[N-Term]", "[S87]", "[S93]"
到目前为止我的方法:
pattern <- "(\\[.*?\\])"
hits <- gregexpr(pattern, a)
matches <- regmatches(a, hits)
unlisted_matches <- unlist(matches)
结果
"[K89; K96]" "[N-Term]" "[S87(100); S93(100)]"
这确实给了我括号,但仍然没有拆分条款。并且出于任何原因,我无法有效地分离“;” 条款。
解决方案
您可以使用
a <- "2xExp [K89; K96]; 1xExp [N-Term]; 2xNum [S87(100); S93(100)]"
pattern <- "(?:\\G(?!^)(?:\\([^()]*\\))?\\s*;\\s*|\\[)\\K[^][;()]+"
matches <- regmatches(a, gregexpr(pattern, a, perl=TRUE))
unlisted_matches <- paste0("[", unlist(matches),"]")
unlisted_matches
## => [1] "[K89]" "[K96]" "[N-Term]" "[S87]" "[S93]"
图案细节
(?:\G(?!^)(?:\([^()]*\))?\s*;\s*|\[)
- 前一个成功匹配的结尾 (\G(?!^)
) 后跟圆括号内的任何子字符串(可选,请参阅(?:\([^()]*\))?
),然后是一个;
包含可选 0+ 空格(请参阅\s*;\s*
)或[
char\K
- 匹配重置运算符丢弃到目前为止匹配的所有文本[^][;()]+
[
- 除,]
,;
和之外(
的一个或多个字符)
。
该paste0("[", unlist(matches),"]")
部分用方括号括起火柴。
推荐阅读
- c++ - 将 .las 文件读入 C++
- ipv6 - 如何从文件中提取ipv6地址
- amazon-web-services - ObjectCreated:在 S3 控制台上传上发布?
- python - 单声道(单声道)音频背景去除算法和实现
- javascript - d3.js 图例重叠图表区域
- git - Git 将我的仓库中的一堆文件显示为已删除,但它们没有
- python-3.x - 如何将一系列随机字符串值分配给变量?(Python)
- java - 如何将 Instant 从 javascript 应用程序传递到 spring-data-rest API
- regex - postgres 正则表达式查询以匹配多个字符串模式
- c# - c#:字符串和字典字典内的字符串字典和列表字典