我已经浏览了一半的 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/