帮助正则表达式

时间:2011-01-17 12:19:45

标签: regex r

使用rSymPy求解方程组,得到x和y的值,用这样的字符串解决系统:

"[(1.33738072607023, 27.9489435205271)]"

我应该如何将这两个值分配给变量x,y?

3 个答案:

答案 0 :(得分:4)

要分割字符串,您可以使用:

vect <- as.numeric(strsplit(gsub("[^[:digit:]\\. \\s]","",x)," "))
x <- vect[1]
y <- vect[2]

这会删除不是空格,点或数字的所有内容。 strsplit拆分向量中剩下的字符串。另请参阅相关的帮助文件。

分配可以循环或使用Gavin的功能完成。我只是命名他们。

names(vect) <-c("x","y")
vect["x"]
       x 
1.337381

对于更大的数据集,我喜欢将各个部分放在一起,以避免使用名称重载工作区。

答案 1 :(得分:2)

以下是一些可以执行您想要的操作的步骤。不能说它是最有效或最优雅的解决方案......

string <- "[(1.33738072607023, 27.9489435205271)]"
string <- gsub("[^[:digit:]\\. \\s]", "", string)
splt <- strsplit(string, " ")[[1]]
names(splt) <- c("x","y")
FOO <- function(name, strings) {
    assign(name, as.numeric(strings[name]), globalenv())
    invisible()
}
lapply(c("x","y"), FOO, strings = splt)

最后一行将返回:

> lapply(c("x","y"), FOO, strings = splt)
[[1]]
NULL

[[2]]
NULL

我们在全球环境中分配了xy

> x
[1] 1.337381
> y
[1] 27.94894

答案 2 :(得分:2)

gsubfn包中的

strapply使得只使用相对简单的正则表达式从字符串中提取数字相当容易。这里s是输入字符串,v是带有两个数字的数字向量:

library(gsubfn)
v <- strapply(s, "[0-9.]+", as.numeric)[[1]]
x <- v[1]
y <- v[2]