我想使用正则表达式来挑选多维单元中的单位,将其输出为SI单位字符列表。
例如,将3维单位kg/h/ml
或kg h-1ml-1
拆分为此'kg'
'h'
'ml'
。
因此,分隔符始终是前后的空格,后面的-1
或单位前的/
。有时我也得到一个.
,那是在一个单位之前。
这意味着角色实际上无关紧要......只要识别出分隔符。
我提供了n维“单位”的示例列表(在本例中为3):
eggie <- c('kg/h/ml', 'mg h-1kPa-1', 'kg h-1 l-1',
'kg /h /ml', 'kg / h / ml', '% /h.ml')
输出应提供一个包含n列的矩阵(在本例中为3),否则会为kgh-1l-1
等在第一个和第二个单元之间没有分隔符的情况输出错误。
更新即可。提供有关“错误”的更多信息,因为我被问及 - 如果 n 为3,但输出为列表中的任何字符串吐出2(或更少)单位,在这种情况下,它不应该输出矩阵。我可能可以编写函数的那部分代码,但是如果有人能够使错误消息调出错误的位置(那将会让我感觉很难找到,但其他任何人,秒)。
[,1] [,2] [,3]
[1,] "kg" "h" "ml"
[2,] "mg" "h" "kPa"
[3,] "kg" "h" "l"
[4,] "kg" "h" "ml"
[5,] 'kg" "h" "ml"
[6,] "%" "h" "ml"
我已经阅读了this中的教程,并认为它可能需要一个包含gsub
和strsplit
组合的函数(我可能完全错了)。但这就像为我学习一门全新的语言。
非常感谢任何帮助(或指向正确的资源以解决这个问题)。
答案 0 :(得分:1)
您似乎想要使用精确的分隔符模式分割您拥有的数据,即
-
+位数(S)/
,.
或空格这种模式是
pat <- "(?:-1|[/.[:space:]])+"
(?:-1|[/.[:space:]])+
正则表达式模式匹配-1
char序列(-1
)或(|
)的一个或多个序列/
,{.
{ {1}}或空格([/.[:space:]]
)。
使用
read.table(text=gsub(pat, " ", eggie), header=FALSE, col.names=c("Unit1","Unit2","Unit3"))
请参阅R demo
一旦字段数不符合预期,就会产生错误(参见stderr
):
扫描错误(file = file,what = what,sep = sep,quote = quote,dec = dec,:
第7行没有3个元素
电话:read.table - &gt;扫描
执行暂停