我遵循模式:
权利要求(40)
这很好。
这也很好。
说明
这是描述。
这种情况下的分隔符字符串是:
第1分界:“索赔(40)”
第二个分隔符:“描述”
我想在这些分隔符之间提取文本,同时排除分隔符。
此外,在上文中,存在以下规则:
第一个分隔符从文本的第一列开始,它是该行上唯一的单词。
在第一个分隔符中,可能缺少左括号,数字组合和右括号。但是,如果是左括号,则存在数字和右括号的组合。
第二个分隔符从文本的第一列开始,它是该行上唯一的单词。
我的正则表达式:
String regxStr = "^Claims(\\(\\d+\\)?)$(.*?)^Description$";
这不起作用。
我尝试了很多其他regx,但没有一个确实有用。最后,我采用了蛮力方法和正则表达式:
String regxStr = "Claims(.*?)Description";
但这两个regx都没有起作用。我无法弄清楚regx出错的地方和位置。 我正在使用Matcher类和Matcher类的find()方法进行进一步处理。
请帮帮我。
答案 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");