Regex R:在两种模式之间获取值

Regex R:在两种模式之间获取值,regex,r,Regex,R,我有一个表示命令行的字符串,其中给出了一个二进制文件和一系列参数 string = "./bin -m A 4 -n 12 --LongName1 12 --LongName2 45 -t Hello -l 0.002 " 我想提取与--LongName1关联的数值。我该怎么做?请注意,--LongName2不一定跟在LongName1后面。任何内容都可以跟在LongName1后面,包括字符串的结尾 我找到了一个解决方案,看起来效果不错,但确实很糟糕: re = regexpr("LongNa

我有一个表示命令行的字符串,其中给出了一个二进制文件和一系列参数

string = "./bin -m A 4 -n 12 --LongName1 12 --LongName2 45 -t Hello -l 0.002 "
我想提取与
--LongName1
关联的数值。我该怎么做?请注意,
--LongName2
不一定跟在
LongName1
后面。任何内容都可以跟在
LongName1
后面,包括字符串的结尾

我找到了一个解决方案,看起来效果不错,但确实很糟糕:

re = regexpr("LongName1", string)
start = attr(re, "match.length") + re[1] + 1
nbdigits = which(is.na(sapply(strsplit(substr(string, start, nchar(string)), ""), as.numeric)))[1] - 1
as.numeric(substr(string, start, start + nbdigits - 1))
# 12

使用带有“向后看”的正则表达式:

string = "./bin -m A 4 -n 12 --LongName1 12 --LongName2 45 -t Hello -l 0.002 "
pattern <- "(?<=--LongName1 )\\d*"
m <- regexpr(pattern, string, perl = TRUE)
regmatches(string, m)
#[1] "12"
string=“./bin-ma 4-n12-longname12-longname245-t Hello-l 0.002”

谢谢,很好用。我不知道这个模式是如何工作的,但我会研究这个问题。
\d*
匹配一个或多个数字。每个基本的正则表达式教程都解释了lookbehind(事实上,我通常会搜索一个,因为我不需要经常使用正则表达式来记住语法)。