Java正则表达式来提取两个令牌之间的任何字符

Java正则表达式来提取两个令牌之间的任何字符,java,regex,Java,Regex,我正在尝试解析以下文本 ### __Description of the report__ Lorem ipsum dolor sit amet, & mauris elit, blandit a turpis vel nibh, consectetuer aliquam. Nec sem. Venenatis quam etiam donec consequat sagittis, luctus porttitor odit sollicitudin <> vesti

我正在尝试解析以下文本

### __Description of the report__
Lorem ipsum dolor sit amet,  & mauris elit, blandit a turpis vel nibh, 
consectetuer aliquam. Nec sem. Venenatis quam etiam donec consequat 
sagittis, luctus porttitor odit sollicitudin <> vestibulum ultrices erat,
sed eleifend 
* amet, sollicitudin sit egestas 
* quis eros nulla. Sed donec

### __Notable filters__
* Lorem ipsum dolor sit amet, mauris elit, blandit a turpis vel
* consectetuer aliquam. Nec sem. Venenatis quam etiam donec consequat 
* sagittis, luctus porttitor odit sollicitudin vestibulum ultrices 
我想捕获报告描述和显著过滤器之间的所有文本,可以是数字、字母或特殊字符的任意组合

我想用报告的描述__值得注意的过滤器可以工作,但不会返回任何结果。如何提取两个标题之间的文本?

使用Pattern.DOTALL:

Pattern.MULTILINE将报告和显著过滤器的描述与每行的开始和结束匹配,因此不能使用。多托会匹配的。对于每个字符,包括\n,如果不指定Pattern.DOTALL,将无法执行此操作

要存储它,请执行以下操作:

Matcher m = p.matcher(str); // 'str' is the string with the text
while(m.find())
{
    YourString = m.group(1);
}
稍后,您可以这样替换额外的空格:

YourString = YourString.replaceAll("\\s+", " ");

您可以使用字符串的split函数,并使用两个头作为正则表达式,并使用“|”运算符连接

这样,第一节的内容将被放置在数组的第一个元素中,第二节的内容将被放置在数组的第二个元素中

请检查此代码:

public class Test {
    private String testString = "### __Description of the report__\n" +
"Lorem ipsum dolor sit amet,  & mauris elit, blandit a turpis vel nibh, \n" +
"consectetuer aliquam. Nec sem. Venenatis quam etiam donec consequat \n" +
"sagittis, luctus porttitor odit sollicitudin <> vestibulum ultrices erat,\n" +
"sed eleifend \n" +
"* amet, sollicitudin sit egestas \n" +
"* quis eros nulla. Sed donec\n" +
"\n" +
"### __Notable filters__\n" +
"* Lorem ipsum dolor sit amet, mauris elit, blandit a turpis vel\n" +
"* consectetuer aliquam. Nec sem. Venenatis quam etiam donec consequat \n" +
"* sagittis, luctus porttitor odit sollicitudin vestibulum ultrices ";

    public static void main (String[] args)
    {
        Test t = new Test();
        String[] parts = t.testString.split("### __Description of the report__\n|### __Notable filters__\n");
    }
}
由于您选择的表达式,似乎没有返回任何内容:

…报告__N

这个。字符匹配非换行符,所以您需要在解析之前删除字符串中的换行符,或者更改表达式以适应输入中的换行符

建议使用,这将通过允许来解决此问题。匹配换行符

或者,您可以更新正则表达式以匹配字符或换行符:


…report| |\n*?…

向我们展示您的代码。这可能是正确的,但答案可能需要包含解释,例如@Radiodef I正要这么做。我现在已经更新了。
public class Test {
    private String testString = "### __Description of the report__\n" +
"Lorem ipsum dolor sit amet,  & mauris elit, blandit a turpis vel nibh, \n" +
"consectetuer aliquam. Nec sem. Venenatis quam etiam donec consequat \n" +
"sagittis, luctus porttitor odit sollicitudin <> vestibulum ultrices erat,\n" +
"sed eleifend \n" +
"* amet, sollicitudin sit egestas \n" +
"* quis eros nulla. Sed donec\n" +
"\n" +
"### __Notable filters__\n" +
"* Lorem ipsum dolor sit amet, mauris elit, blandit a turpis vel\n" +
"* consectetuer aliquam. Nec sem. Venenatis quam etiam donec consequat \n" +
"* sagittis, luctus porttitor odit sollicitudin vestibulum ultrices ";

    public static void main (String[] args)
    {
        Test t = new Test();
        String[] parts = t.testString.split("### __Description of the report__\n|### __Notable filters__\n");
    }
}