正则表达式以提取包含管道字符的文本

时间:2016-08-02 08:54:07

标签: java regex

我有一个字符串,需要一个正则表达式来从字符串中提取子字符串。

示例:a|b|c|d, e|f|g|h
结果:Pattern ptyy = Pattern.compile("\\|*.+? "); Matcher matcher_values = ptyy.matcher("this is a|b|c|d whatever e|f|g|h"); while (matcher_values.find()) { String line = matcher_values.group(0); System.out.println(line); }

但是根据我编写的Java代码,它产生的结果如下:

this 
is 
a|b|c|d 
whatever 

结果

set

结果不是我所希望的。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我认为这个正则表达式足够(.\|)+.

请参阅example

(.\|) 这会找到所有a|b|...|和最后 . 找到子字符串的最后一个字符。

答案 1 :(得分:1)

您的a模式匹配0个或更多个管道,然后是1个或更多个除了换行符之外的任何字符,直到第一个空格。因此,它匹配字符串中的几乎所有非空格块。

如果bc[^\s|]+(?:\|[^\s|])+ 只是占位符,并且可能存在任何非空白字符,我建议:

[^\s|]+

请参阅regex demo

<强>详情:

  • | - 除了空格和(?:\|[^\s|])+
  • 之外的1个或多个字符
  • \| - 1个或多个序列:
    • | - 文字[^\s|]
    • | - 除了空格和Pattern ptyy = Pattern.compile("[^\\s|]+(?:\\|[^\\s|])+"); Matcher matcher_values = ptyy.matcher("this is a|b|c|d whatever e|f|g|h"); while (matcher_values.find()) { String line = matcher_values.group(0); System.out.println(line); }
    • 之外的1个或多个字符

Java demo

 final String x = "abc_123_456_defgh_ijkl_mnop_qr";
        final String[] xw = x.split("_");
        for (final String s : xw) {
            System.out.println(s);
        }

答案 2 :(得分:0)

根据你的建议,我设法提出了我自己的正则表达式,可以解决管道表达式的不同组合。

*focusnode

这将使我能够得到结果

*parent.left

谢谢大家!