2

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

  • 它可能会或可能不会以一系列'.
  • 它可能会也可能不会以一系列'.
  • 应提取上述内容之间的任何内容。但是,包含的字符串也可能包含也可能不包含一系列'.

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

  • ''''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''''

任何指针?

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

4

3 回答 3

0

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

例如尝试以下模式: [^']+(.+'*.+)+[^'$]

于 2012-05-31T08:05:27.703 回答
0

这个对我有用。

        String str = "''''aa''bb''cc''''";
        Pattern p = Pattern.compile("^'*(.*?)'*$");
        Matcher m = p.matcher(str);
        if (m.find()) {
            System.out.println(m.group(1));
        }
于 2012-05-31T08:10:56.047 回答
0

我在 Java 方面不是很好,所以我希望正则表达式就足够了。对于您的示例,它运行良好

s/^'*(.+?)'*$/$1/gm
于 2012-05-31T08:13:03.027 回答