如何编写正确的正则表达式从字符串中提取值?

时间:2013-12-01 06:31:01

标签: r

> str="  9.48  12.89 13.9    6.79   "
> strsplit(str,split="\\s+")
[[1]]
[1] ""      "9.48"  "12.89" "13.9"  "6.79" 

> unlist(strsplit(str,split="\\s+"))->y
> y[y!=""]
[1] "9.48"  "12.89" "13.9"  "6.79" 

我怎样才能通过strsplit的单个正则表达式来获取它,而不是用它来实现它 y[y!=""]

2 个答案:

答案 0 :(得分:2)

我会在分割之前剪掉字符串:

strsplit(gsub("^\\s+|\\s+$", "", str), "\\s+")[[1]]
# [1] "9.48"  "12.89" "13.9"  "6.79" 

或者,在这种情况下使用scan非常直接:

scan(text=str)
# Read 4 items
# [1]  9.48 12.89 13.90  6.79

答案 1 :(得分:1)

如果你想提取正则数字后面的数字,那么

regmatches(str, gregexpr("[0-9.]+", text = str))[[1]]
## [1] "9.48"  "12.89" "13.9"  "6.79"

要捕获-ve数字,您可以使用以下

str = "  9.48  12.89 13.9    --6.79   "
regmatches(str, gregexpr("\\-{0,1}[0-9.]+", text = str))[[1]]
## [1] "9.48"  "12.89" "13.9"  "-6.79"