首页 > 解决方案 > 如何根据特定要求分隔字符串

问题描述

我有一个变量 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(),但不知道如何实现它。任何建议表示赞赏。谢谢!

标签: rregex

解决方案


你可以使用

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 结尾 + 至少一个空格 + 第三部分匹配包含任何内容。


推荐阅读