0

我有一个文档,我正在尝试使用 Java Regex 解析,并且其中的文本出现在引号中的 """ 或 ''' 中,因此您有:

""" Bla,你不是很好!""" 或者:

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

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

假设: 文本将以“””或“'”开始和结束 文本可以包括数字、字母、空格和标点符号 文本的主体将不包括三个“或三个'的序列

4

2 回答 2

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

您也可能比.*?“标点符号”更具体,但我不确定您指的是什么字符。

于 2012-07-10T07:50:56.780 回答
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 个正则表达式变得更简单。上面的代码产生了以下结果:

布拉,你不是很好!

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

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

于 2012-07-10T07:59:08.487 回答