Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从字符串中提取n-decimal_Regex_R - Fatal编程技术网

Regex 从字符串中提取n-decimal

Regex 从字符串中提取n-decimal,regex,r,Regex,R,我已经浏览了half stackoverflow以查找此内容,但似乎没有任何内容完全匹配,如果有错误,请道歉 我有一个字符串,格式如下: fname获取第二个数字 regmatches(x, regexpr("^\\D*\\d+\\D*\\K\\d+(?:\\.\\d+)?", x, perl=TRUE)) 或 示例: > x <-'FS1_SCN0.83_axg3.csv' > regmatches(x, regexpr("^\\D*\\d+\\D*\\K\\d+(?:\

我已经浏览了half stackoverflow以查找此内容,但似乎没有任何内容完全匹配,如果有错误,请道歉

我有一个字符串,格式如下:


fname获取第二个数字

regmatches(x, regexpr("^\\D*\\d+\\D*\\K\\d+(?:\\.\\d+)?", 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(fname, gregexpr("\\d+(?:\\.\\d+)?", fname))[[1]][2]
[1] "0.83"
正则表达式 描述

示例代码 您可以使用这个
perl=True
选项并获取匹配项。请参阅演示


您可以从
stringr
包中使用
str\u extract\u all()
匹配给定输入中的所有数字,然后从结果数组中获取捕获的组2:

library(stringr)

str_extract_all(fname, "([0-9]+(?:\\.[0-9]+)?)")

根据您的评论,您可以使用以下内容:
[A-Z]+(\d+(\.\d+))
,如图所示。作为一个小提示,这个建议的答案没有做任何张贴的答案没有做的事情。我只是觉得它更可读,更容易理解


如果您知道确切的字符,用上述字符替换
[A-Z]
部分可能是有意义的。这将使表达式更加直观。

它是否总是
字母下划线
?是的,它会,我甚至知道具体的字符。很高兴听到您的解决方案,但我认为推广它对其他人来说会更有趣。谢谢,这里提出的似乎是最简单的解决方案,但不确定如何从数组中提取第二个匹配项?您可以这样做:
match=stru extract\u all(fname),([0-9]+(?:\\.[0-9]+)”
然后
match[[2]
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"
.+_SCN(\d+(?:\.\d+)?)_.+\.csv
sub(".+_SCN(\\d+(?:\\.\\d+)?)_.+\\.csv", "\\1", fname)
^.*?(?:\\d+(?:\\.\\d+)?).*?\\K\\d+(?:\\.\\d+)?
gsub("^.*?(?:\\d+(?:\\.\\d+)?).*?(\\d+(?:\\.\\d+)?).*$","\\1",fname,perl=TRUE)
library(stringr)

str_extract_all(fname, "([0-9]+(?:\\.[0-9]+)?)")