regex - 使用正则表达式从 R 中的字符串中获取数据

标签 regex r

现在字符串看起来像:

"Interest.USD,Vol=[Integrated,(0,0.101),(0.2,0.108),(1,0.110),(2,0.106),
(3,0.102),(4,0.09),(5,0.091),(6,0.09128272)],Drift=[Integrated,(0.002,0.09),
(0.24,0.0007),(0.4,0.007),(1,-0.033),(2,-0.005),(3,-0.0041),
(4,-0.3505),(5,-0.65),(7,-0.08346),(8,-0.049),(9,-0.0613),(10,-0.019)],
Risk_Neutral=YES,Lambda=0.09,FX_Volatility=0.01,FX_Correlation=0.9"

我想以矩阵格式获取“Vol”和“Drift”之后的数据,例如:

体积矩阵:
0,0.101
0.2,0.108
1,0.110
2,0.106
3,0.102
4,0.09
5,0.091
6,0.09128272

以及 Lambda 的单个值,如 0.09。我想我应该使用正则表达式,但我对此并不熟悉。有什么建议吗? :)

附言
我尝试使用:
str_extract_all(text,'[ .+? ]')

尝试获取 [ 和 ] 之间的数据,但它返回“。”

最佳答案

这是在 R 中提取这些值的一种方法。假设您发布的字符串存储在名为 a 的变量中。 .为了让事情更简单,我将使用一个辅助函数:getcapturedmatches() .然后你可以做

expr <- "(Vol|Drift)=\\[Integrated,([^\\]]*)\\]"
mm <- regcapturedmatches(a,gregexpr(expr,a, perl=T))[[1]]
expr <- "\\(([^,]+),([^,]+)\\)"
vv <- regcapturedmatches(mm[,2],gregexpr(expr,mm[,2], perl=T))

首先我们做一个pass来提取mm中的Vol和Drift元素。然后我们将逗号分隔的列表拆分为 vv .现在我们可以将数据组合成一个大的 data.frame
tt <- Map(data.frame, col=mm[,1], val=lapply(vv, 
    function(x) {class(x)<-"numeric"; x}))
dd<-do.call(rbind, unname(tt))

到底dd看起来像
     col  val.1       val.2
1    Vol  0.000  0.10100000
2    Vol  0.200  0.10800000
3    Vol  1.000  0.11000000
4    Vol  2.000  0.10600000
5    Vol  3.000  0.10200000
6    Vol  4.000  0.09000000
7    Vol  5.000  0.09100000
8    Vol  6.000  0.09128272
9  Drift  0.002  0.09000000
10 Drift  0.240  0.00070000
11 Drift  0.400  0.00700000
12 Drift  1.000 -0.03300000
13 Drift  2.000 -0.00500000
14 Drift  3.000 -0.00410000
15 Drift  4.000 -0.35050000
16 Drift  5.000 -0.65000000
17 Drift  7.000 -0.08346000
18 Drift  8.000 -0.04900000
19 Drift  9.000 -0.06130000
20 Drift 10.000 -0.01900000

此方法允许在每个部分中使用任意数量的重复值。

如果你只是想要简单的矩阵,那么
Map(function(a,b) {class(b)<-"numeric"; b}, mm[,1], 
    lapply(vv, function(x) {class(x)<-"numeric"; x}))

会给你一个命名的矩阵列表。

关于regex - 使用正则表达式从 R 中的字符串中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24308951/

相关文章:

php - Eclipse:查找分布在多行中的查询字符串

r - 将使用 Markdown 语法编写的文本文件嵌入到另一个 RMarkdown 文件中

r - 保存错误 : Error in gzfile(file, "wb") : 无法打开连接

r - 在 R 中打印长字符串数据帧

r - 将变量名传递给R中的函数

java - 用于替换第一个 Markdown /标签符号的正则表达式

regex - 用 grep 匹配一行中的两个字符串

javascript - 无法正确设置数字格式

用于匹配 URL 的最后两部分的正则表达式

r - 如何用 `eval`函数调用 `with`?