18

"3.1 ml"またはのような文字列があります"abc 3.1 xywazw"

この文字列から抽出したいと思い"3.1"ます。文字列からの数値の抽出に関するスタックオーバーフローに関する多くの質問を見つけましたが、10 進数の場合には解決策がありません。

4

4 に答える 4

18

このアプローチにより、小数点と小数がオプションになり、複数の数値を抽出できるようになります。

str <- " test 3.1 test 5"
as.numeric(unlist(regmatches(str,
                             gregexpr("[[:digit:]]+\\.*[[:digit:]]*",str))
          )      )
#[1] 3.1 5.0

負の数に関する懸念は、オプションの perl スタイルの先読みで対処できます。

 str <- " test -4.5 3.1 test 5"
    as.numeric(unlist(regmatches(str,gregexpr("(?>-)*[[:digit:]]+\\.*[[:digit:]]*",str, perl=TRUE))))

#[1] -4.5  3.1  5.0
于 2013-10-08T16:55:37.397 に答える
7

R で動作するように微調整したhttp://www.regular-expressions.info/floatingpoint.htmlの浮動小数点数の正規表現。

s <- "1e-6 dkel"
regmatches(s,gregexpr("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?",s)) 
> [[1]]
> [1] "1e-6"
于 2013-10-08T19:25:33.573 に答える
1

正規表現を使用できます:

> str <- " test 3.1 test"
> as.numeric(regmatches(str,regexpr("[[:digit:]]+\\.[[:digit:]]+",str)))
[1] 3.1

regexpr一致した文字列の開始位置と長さを返します。regmatches一致を返します。その後、数値に変換できます。

于 2013-10-08T16:19:00.717 に答える