丢弃字符的前导和尾随系列,否则保留相同的字符

时间:2012-05-31 07:58:58

标签: java regex

我必须使用以下规则处理字符串:

  • 它可能会也可能不会从一系列'开始。
  • 它可能会也可能不会以一系列'结尾。
  • 应提取上述内容。但是,封闭的字符串也可能包含或不包含一系列'

例如,我可以将以下字符串作为输入:

  • ''''aa''''
  • ''''aa
  • aa''''
  • ''''aa''bb''cc''''

对于上面的例子,我想从中分别提取以下内容:

  • aa
  • aa
  • aa
  • aa''bb''cc

我在Java中尝试了以下代码:

Pattern p = Pattern.compile("[^']+(.+'*.+)[^']*");
Matcher m = p.matcher("''''aa''bb''cc''''");
while (m.find()) {
    int count = m.groupCount();
    System.out.println("count = " + count);
    for (int i = 0; i <= count; i++) {
        System.out.println("-> " + m.group(i));
    }

但我得到以下输出:

count = 1
-> aa''bb''cc''''
-> ''bb''cc''''

任何指针?

编辑:没关系,我在正则表达式末尾使用的是*,而不是+。做这个改变给了我想要的输出。但我仍然欢迎对正则表达式进行任何改进。

3 个答案:

答案 0 :(得分:0)

查看Java的Pattern类的边界匹配器(http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html)。特别是$(=行尾)可能很有趣。我还建议使用以下eclipse插件进行正则表达式测试:http://sourceforge.net/projects/quickrex/它使您可以准确地查看匹配的内容以及给定测试字符串的正则表达式组。

E.g。尝试以下模式:[^'] +(。+'*。+)+ [^'$]

答案 1 :(得分:0)

这个适合我。

        String str = "''''aa''bb''cc''''";
        Pattern p = Pattern.compile("^'*(.*?)'*$");
        Matcher m = p.matcher(str);
        if (m.find()) {
            System.out.println(m.group(1));
        }

答案 2 :(得分:0)

我在Java方面不是那么好,所以我希望正则表达式足够了。对于您的示例,它是works well

s/^'*(.+?)'*$/$1/gm