我有一个文档,我正在尝试使用 Java Regex 解析,并且其中的文本出现在引号中的 """ 或 ''' 中,因此您有:
""" Bla,你不是很好!""" 或者:
''' Bla,这 1 不是一个很好的例子 '''
我一直在尝试["""|''']([\p{Alnum}|\p{Blank}]+)[\"""|''']
假设: 文本将以“””或“'”开始和结束 文本可以包括数字、字母、空格和标点符号 文本的主体将不包括三个“或三个'的序列
试试这个模式:("""|''').*?\1
鉴于:
"""Hello, World!""" some unquoted text """ lorem ipsum ''" dolor """ some more unquoted text '''single quotes'''
''' Bla, this 1 isn't a great example '''
它将匹配:
"""Hello, World!"""
""" lorem ipsum ''" dolor """
'''single quotes'''
''' Bla, this 1 isn't a great example '''
您也可能比.*?
“标点符号”更具体,但我不确定您指的是什么字符。
像这样对我有用:
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
运算符)。您将需要用圆括号替换您的方括号。