Java正则表达式在“”或“”之间捕获文本

时间:2012-07-10 07:43:56

标签: java regex

我有一个文档,我正在尝试使用Java Regex进行解析,并在其中显示引号中的文本“”或“”,因此您有:

“”“Bla,你不是很好!”“” 或者:

'''Bla,这个1不是一个很好的例子'''

我一直在尝试["""|''']([\p{Alnum}|\p{Blank}]+)[\"""|''']

假设: 文本将以“”或“”开头和结尾 文本可能包括数字,字母,空格和标点符号 文本正文将不包括三个“或三个”

的序列

2 个答案:

答案 0 :(得分:0)

尝试此模式:("""|''').*?\1

假设:

"""Hello, World!""" some unquoted text """ lorem ipsum ''" dolor """ some more unquoted text '''single quotes'''
''' Bla, this 1 isn't a great example '''

它将匹配:

  1. """Hello, World!"""
  2. """ lorem ipsum ''" dolor """
  3. '''single quotes'''
  4. ''' Bla, this 1 isn't a great example '''
  5. 您也可能比.*?更具体,但我不确定“标点符号”中您指的是什么字符。

答案 1 :(得分:0)

这样的事情对我有用:

        Pattern p = Pattern.compile("(\"{3}(.*?)\"{3})|('{3}(.*?)'{3})");
        String s1 = "\"\"\" Bla, you're not very nice! \"\"\"";
        String s2 = "''' Bla, this 1 isn't a great example '''";

        Matcher m1 = p.matcher(s1);
        Matcher m2 = p.matcher(s2);

        if (m1.matches())
        {
            System.out.println(m1.group(2));
        }


        if (m2.matches())
        {               
            System.out.println(m2.group(4));
        }
然而,它会使使用2个正则表达式变得更简单。上面的代码产生了以下内容:

  Bla,你不是很好!

     

Bla,这个1不是一个很好的例子

正则表达式的一个问题是方括号内的任何文本都是 OR'D ,这意味着Pipe字符是无用的(作为OR运算符)。您需要将圆括号替换为方括号。