无法创建多行正则表达式

时间:2013-07-03 19:56:25

标签: java regex

我正在做一些数据清理工作,我必须使用(iText)将pdf文件转换为文本。我需要从解析后提取一些数据表。 (表格可以按任何顺序出现,因此无法逐行解析)。无论如何,我开始研究同样的正则表达式解决方案,我认为会更容易,但显然不适合我。

数据看起来像这样

Dummy Value Data
VAL1 VAL2 Mean Calc  Calc2
(mf) (m) (rad) (rad) (rad/100m)
0.0 0.0 0.0 0.0 0.000
9224.0 9224.0 0.0 0.0 0.000
9928.0 9925.9 2.3 322.5 0.490
9885.0 9889.8 0.9 285.9 -0.953
5432.0 5432.5 3.3 95.4 -0.509
<newline>
<newline>

这与我想捕获的模式完全相同。最后2个新行标志着模式的结束。 我确实尝试过一些东西,但没有任何效果。我也可以分享我的正则表达式,但他们不工作。

2 个答案:

答案 0 :(得分:0)

您可以使用find方法

你的正则表达式是

(?<VAL1>[-+]?\d+([.]\d+)?)\s+(?<VAL2>[-+]?\d+([.]\d+)?)\s+(?<Mean>[-+]?\d+([.]\d+)?)\s+(?<Calc>[-+]?\d+([.]\d+)?)\s+(?<Calc2>[-+]?\d+([.]\d+)?)

您的代码

Matcher m=Pattern.compile(aboveRegex).matcher();
while(m.find())
{
    m.group("VAL1");
    m.group("VAL2");
    m.group("Mean");
    m.group("Calc");
}

修改

匹配多个此类表格

([+-]?\d+([.]\d+)?( [+-]?\d+([.]\d+)?){4}(\r?\n))+(?=(\r?\n))

答案 1 :(得分:0)

尝试下一个正则表达式:

(\w+( +\w+)*)\r?\n(\w+( +\w+)*)\r?\n(\([\w/]+\)( \([\w/]+\))*)\r?\n((-?\d+\.\d+( -?\d+\.\d+)* *)\r?\n)*(?=(\r?\n){2})

<newline> 在正则表达式中为\r?\n