使用gregexpr获取字符串中的位置

时间:2015-02-11 13:28:12

标签: regex r

我想要做的是在字符串中提取某个表达式的位置(长度为22588)。我通过以下方式尝试了它:

这是我正在寻找的模式:

\n,null,[null,null,12.27,800.54]\n,
\n,null,[null,null,12.58,670.84]\n,
\n,null,[null,null,13.45,750.25]\n,

等等。

我试着举个例子:

test = "some other stuff \n,null,[null,null,12.27,800.54]\n, other stuff a lot of characters \n,null,[null,null,12.58,670.84]\n, and again  \n,null,[null,null,13.45,750.25]\n,"

现在我想得到表达式的位置。有这种模式:

\n,null,[null,null,"decimal numbers""comma between decimal numbers""decimal numbers"]\n,

这就是我的尝试:

mypattern = "\\\\n,null,\\[\null,null,[:alnum:]\\]\\\\\n,"

gg = gregexpr(mypattern,datalines)

不幸的是,这不起作用。在中间我总是有这些坐标。所以我需要一个通配符,我也认为R有一个问题就是阅读元字符。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以尝试使用此模式:

"\\\n,null,\\[null,null,\\d+\\.\\d+\\,\\d+\\.\\d+\\]\\\n"

或此模式,如果每个"之前和之后的数字位数。"保持不变:

"\\\n,null,\\[null,null,\\d{2}\\.\\d{2}\\,\\d{3}\\.\\d{2}\\]\\\n"

使用您的示例:

gregexpr("\\\n,null,\\[null,null,\\d+\\.\\d+\\,\\d+\\.\\d+\\]\\\n",test)
gregexpr("\\\n,null,\\[null,null,\\d{2}\\.\\d{2}\\,\\d{3}\\.\\d{2}\\]\\\n",test)
#[[1]]
#[1]  18  84 129
#attr(,"match.length")
#[1] 32 32 32
#attr(,"useBytes")
#[1] TRUE