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");
}
}