r - 如何根据特定要求分隔字符串
问题描述
我有一个变量 a,它包含如下字符:
DEVICE PRF .75MG 0.5ML
DEVICE PRF 1.5MG 0.5MLX4
CAP 12-25MG 30
CAP DR 60MG 100UD 3270-33 (32%)
我想将它们分成三个部分(或变量):
x y z
DEVICE PRF .75MG 0.5ML
DEVICE PRF 1.5MG 0.5MLX4
CAP 12-25MG 30
CAP DR 60MG 100UD 3270-33 (32%)
第一部分是描述,第二部分是强度,第三部分是体积。我想我可以使用 gregexpr(),但不知道如何实现它。任何建议表示赞赏。谢谢!
解决方案
你可以使用
library(stringr)
str_match(x, "(.*)[ ]{1,}(.*(MG|ML))[ ]{1,}(.*)")[, -c(1, 4)]
# [,1] [,2] [,3]
# [1,] "DEVICE PRF" ".75MG" "0.5ML"
# [2,] "DEVICE PRF" "1.5MG" "0.5MLX4"
# [3,] "CAP" "12-25MG" "30"
# [4,] "CAP DR" "60MG" "100UD 3270-33 (32%)"
假设第二/中间部分总是以 MG 或 ML 结尾并且没有空格。
该模式(.*)[ ]{1,}(.*(MG|ML))[ ]{1,}(.*)
可以读作:匹配的第一部分包含任何内容 + 至少一个空格 + 第二部分匹配以 MG 或 ML 结尾 + 至少一个空格 + 第三部分匹配包含任何内容。
推荐阅读
- data-visualization - 可视化纵向患者数据:向时间序列热图中的某些单元格添加特定图标或符号以指示事件/结果
- python - 创建变量列表
- python - 可以先用 mongoengine 定义一个文档,然后用 pymongo 插入很多文档吗?
- javascript - 在 gulp 中使用 fs.readdirSync 的正确方法以及如何集成它?
- php - 未定义索引:在另一个浏览器或邮递员中使用 session_start() 时
- c# - 将类数据保存为文本文件
- cocoa - 将第二个视图控制器添加到情节提要
- c++ - Leetcode 1423:如何优化暴力递归方法?
- python-3.x - 从最近一天开始每天重新采样到每年一次?
- java - camunda spring boot starter with gradle 缺少 processEngineConfigurationImpl bean