Java正则表达式捕获“之间的文本”&引用&引用;或''';
我有一个我正试图用Java正则表达式解析的文档,文档中的文本以引号形式显示为“”,或者“”,因此您有: “布拉,你不是很好!""" 或: “布拉,这不是一个很好的例子” 我一直在尝试使用Java正则表达式捕获“之间的文本”&引用&引用;或''';,java,regex,Java,Regex,我有一个我正试图用Java正则表达式解析的文档,文档中的文本以引号形式显示为“”,或者“”,因此您有: “布拉,你不是很好!""" 或: “布拉,这不是一个很好的例子” 我一直在尝试使用[“”“|”]([\p{Alnum}\p{Blank}]+)[\“”“|”] 假设: 文本将以“”或“”开头和结尾 文本可以包括数字、字母、空格和标点符号 正文将不包括三个“或三个”的顺序。请尝试以下模式:(“|”) 鉴于: """Hello, World!""" some unquoted text """
[“”“|”]([\p{Alnum}\p{Blank}]+)[\“”“|”]
假设:
文本将以“”或“”开头和结尾
文本可以包括数字、字母、空格和标点符号
正文将不包括三个“或三个”的顺序。请尝试以下模式:(“|”)
鉴于:
"""Hello, World!""" some unquoted text """ lorem ipsum ''" dolor """ some more unquoted text '''single quotes'''
''' Bla, this 1 isn't a great example '''
它将匹配:
“你好,世界!”
“lorem ipsum”或“dolor”
“单引号”
''Bla,这不是一个很好的例子'
你也可能比*?
更具体,但我不确定你所说的“标点符号”是什么意思。类似的东西对我来说很有用:
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个正则表达式会更简单
布拉,你不是很好
布拉,这不是一个很好的例子
正则表达式的一个问题是,方括号内的任何文本都是或,这意味着管道字符是无用的(作为或运算符)。您需要将方括号替换为圆括号。首先,您需要使用(“|””)
而不是[“|”]
。[]
是字符类而不是组。这不符合OPs规范:文本正文将不包含三个“或三个”的序列
确定,因此从第二个示例中去掉“”。。。有什么区别?如果它真的应该匹配不匹配的引号,那么你可以用(“''.''”)
替换\1
,但我怀疑这是真的。是的,我更改了我的注释,因为这并没有错,只是混淆了示例。公平地说,我更新了示例以包含'
,以避免混淆。这不是无用的。字符类中的|
将与源文本中的文本|
匹配。另一方面,在类中重复字符肯定是无用的。这是毫无意义的,因为实际的问题是它应该是一个团体。@Veredesmarld:是的,你说得有道理。我对我的答案稍作修改。