Regex 从字符串中提取n-decimal
我已经浏览了half stackoverflow以查找此内容,但似乎没有任何内容完全匹配,如果有错误,请道歉 我有一个字符串,格式如下: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+(?:\
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]+)?)")