Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
414 views
in Technique[技术] by (71.8m points)

r - Extracting decimal numbers from a string

I have a string such as "3.1 ml" or "abc 3.1 xywazw"

I'd like to extract "3.1" from this string. I have found many questions on stackoverflow about the extraction of numbers from a character string, but no solution works for the case of decimal numbers.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This approach makes the decimal point and decimal fraction optional and allows multiple numbers to be extracted:

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

The concern about negative numbers can be address with optional perl style look-ahead:

 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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...