我有一个问题,要从具有以下行的几个文件中提取字符串的一部分:
单位=指定 -名称0 = prDM:压力,Digiquartz [db] -名称1 = t090C:温度[ITS-90,摄氏度] -名称2 = c0S / m:电导率[S / m] -名称3 = t190C:温度,2 [ITS-90,摄氏度] -名称4 = c1S / m:电导率,2 [S / m] -名称5 = flSP:荧光,Seapoint -名称6 = sbeox0ML / L:氧气,SBE 43 [ml / l] -名称7 = altM:高度计[m] -名称8 = sal00:盐度,实用[PSU] -名称9 = sal11:盐度,实用,2 [PSU] -范围0 = 1.000,42.000
我只需要提取以“ name”开头的列的信息,并提取=和:之间的所有内容。 例如,在“名称0 = prDM:压力,Digiquartz [db]”行中,所需结果将是prDM。 一些文件具有不同数量的“名称”行(即,该示例具有13行,而其他文件具有16行,并且数量有所不同),所以我希望它尽可能通用,因此我可以始终独立提取正确的字符串行数。行以#开头,名称前有一个空格。 我已经尝试过此代码,但它仅提取第一行。你能帮我吗?非常感谢!
CNV<-NULL
for (i in 1:nro.files){
x <- readLines(all.files[i])
name.col<-grep("^\\# name", x)
df <- data.table::fread(text = x[name.col])
CNV[[i]]<-df
}
答案 0 :(得分:0)
使用stringr
和正则表达式模式"name \\d+ = (.*?):"
,在单词中表示“名称,后跟一个或多个数字,后跟等号,后跟一个空格,后跟一个包含任何字符的捕获组(句点)零次或多次(*),后接一个冒号”。
library(stringr)
strings <- c("name 0 = prDM: Pressure, Digiquartz [db]",
"name 1 = t090C: Temperature [ITS-90, deg C]",
"name 2 = c0S/m: Conductivity [S/m]",
"name 3 = t190C:Temperature, 2 [ITS-90, deg C]",
"name 4 = c1S/m: Conductivity, 2 [S/m]",
"name 5 = flSP: Fluorescence, Seapoint",
"name 6 = sbeox0ML/L: Oxygen, SBE 43 [ml/l]",
"name 7 = altM: Altimeter [m]",
"name 8 = sal00: Salinity, Practical [PSU]",
"name 9 = sal11: Salinity, Practical, 2 [PSU]")
result <- str_match(strings, "name \\d+ = (.*):")
result[,2]
[1] "prDM" "t090C" "c0S/m" "t190C" "c1S/m" "flSP" "sbeox0ML/L"
[8] "altM" "sal00" "sal11"
或者,如果您更喜欢base
pattern = "name \\d+ = (.*):"
result <- regmatches(strings, regexec(pattern, strings))
sapply(result, "[[", 2)
[1] "prDM" "t090C" "c0S/m" "t190C" "c1S/m" "flSP" "sbeox0ML/L"
[8] "altM" "sal00" "sal11"
答案 1 :(得分:0)
使用软件包str_extract
中的stringr
并积极向前和向后看:
str <- "name 0 = prDM: Pressure, Digiquartz [db]"
str_extract(str, "(?<== ).*(?=:)")
[1] "prDM"
说明:
(?<== )
,如果您看到=
,其后是左侧的空白(向后看)
.*
匹配所有内容,直到...
(?=:)
...您在右边看到一个冒号(向前看)
答案 2 :(得分:0)
在基本R中
var result = document.getElementById("name");
var final = result.getElementsByTagName("span");
console.log(final);
解释
test <- c("name 0 = prDM: Pressure, Digiquartz [db]","name 1 = t090C: Temperature [ITS-90, deg C]")
gsub("^name [0-9]+ = (.+):.+","\\1",test)
[1] "prDM" "t090C"
搜索名称以任何长度的数字结尾的字符串^name [0-9]+
的开头
^
在= (.+):
和+
之间发现的任何字符.
的任何长度=
被存储:
,以后由{{ 1}}