regex - 从字符串中提取 n-decimal

标签 regex r

我已经浏览了一半的 stackoverflow 来寻找这个,但似乎没有什么是完全匹配的,如果错了,抱歉。

我有一个字符串的格式:
fname <-'FS1_SCN0.83_axg3.csv'
我想提取第二个数字,它恰好是一个小数,但也可以是一个整数,结果是 0.83(如果是整数,则为 3)。我最接近的是这个:

gsub("[^0-9.]","\\2",fname)

它产生 fname (10.833.) 中的所有数字和十进制标记,但作为一个完整的字符串。

提前致谢,第。

最佳答案

要获得第二个数字,

regmatches(x, regexpr("^\\D*\\d+\\D*\\K\\d+(?:\\.\\d+)?", x, perl=TRUE))

Demo

或者
sub("^\\D*\\d+\\D*(\\d+(?:\\.\\d+)?).*", "\\1", x, perl=TRUE)

示例:
> x <-'FS1_SCN0.83_axg3.csv'
> regmatches(x, regexpr("^\\D*\\d+\\D*\\K\\d+(?:\\.\\d+)?", x, perl=TRUE))
[1] "0.83"
> sub("^\\D*\\d+\\D*(\\d+(?:\\.\\d+)?).*", "\\1", x, perl=TRUE)
[1] "0.83"

对于更一般的情况,
regmatches(x, regexpr("^\\D*\\d+(?:\\.\\d+)?\\D*\\K\\d+(?:\\.\\d+)?", x, perl=TRUE))
sub("^\\D*\\d+(?:\\.\\d+)?\\D*(\\d+(?:\\.\\d+)?).*", "\\1", x, perl=TRUE)



只需指定索引号即可获得您想要的数字。
> regmatches(fname, gregexpr("\\d+(?:\\.\\d+)?", fname))[[1]][2]
[1] "0.83"

关于regex - 从字符串中提取 n-decimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299077/

相关文章:

regex - 使用 sed 一个接一个地添加一个文本 block

regex - 在字符串列中查找非整数值

r - 在时间戳的一列上使用 difftime 计算时间的运行差异

r - 在 ggplot 中圈出圆形条形图

r - Postgres : How to deal with deprecated hstore operator: "=>"

python - 具有反向引用的 re.sub

c++ - 如何在 Qt 正则表达式中模拟负向后断言?

javascript - 帮助使 "universal"正则表达式 Javascript 兼容

R 将命名列表取消列出为一个字符串,并保留列表名称

r - 在 ggplot2 中合并图例的标题中使用上标