如何提取由2个字符串分隔的多行文本

时间:2014-01-30 03:39:06

标签: java regex delimiter

我遵循模式:

  

权利要求(40)
  这很好。
  这也很好。
  说明
  这是描述。

这种情况下的分隔符字符串是:

  

第1分界:“索赔(40)”
  第二个分隔符:“描述”

我想在这些分隔符之间提取文本,同时排除分隔符。

此外,在上文中,存在以下规则:

  1. 第一个分隔符从文本的第一列开始,它是该行上唯一的单词。

  2. 在第一个分隔符中,可能缺少左括号,数字组合和右括号。但是,如果是左括号,则存在数字和右括号的组合。

  3. 第二个分隔符从文本的第一列开始,它是该行上唯一的单词。

  4. 我的正则表达式:

    String regxStr = "^Claims(\\(\\d+\\)?)$(.*?)^Description$";

    这不起作用。

    我尝试了很多其他regx,但没有一个确实有用。最后,我采用了蛮力方法和正则表达式:

    String regxStr = "Claims(.*?)Description";

    但这两个regx都没有起作用。我无法弄清楚regx出错的地方和位置。 我正在使用Matcher类和Matcher类的find()方法进行进一步处理。

    请帮帮我。

3 个答案:

答案 0 :(得分:1)

这会捕获您想要的文本,但我并不完全清楚您对(40)部分的要求。 @ lovetostrike的答案解决了这个问题。

\bClaims(?:\(\d+\))?\s+(.+?)\s+Description\b

编译模式时必须激活DOTALL标志:

Pattern.compile(regxStr, Pattern.DOTALL)

以Java字符串形式转义:

"\\bClaims(?:\\(\\d+\\))?\\s+(.+?)\\s+Description\\b"

答案 1 :(得分:0)

除了@aliteralmind答案之外,Regex还不是嵌套结构的好工具,即匹配paren对。但在您的简单情况下,您可以在模式中使用OR,'|'运算符。外部的parens用于将OR运算符分为两组,第一部分用parens,第二部分没有parens。

(\\(\\d+\\)|\\d+)

答案 2 :(得分:0)

这是一个单线解决方案:

String target = input.relaceAll(".*Claims(\\(\\d+\\))?\\s+(.*?)Description.*", "$1");