如何匹配引号内的字符串后跟花括号内的字符串?

3

我需要一个正则表达式来匹配引号内的字符串,后面跟着一个空格,然后是一个圆括号和一个花括号。

例如,在Java中,我想匹配以下文本:

"'Allo 'Allo!" (1982) {A Barrel Full of Airmen (#7.7)}

这个正则表达式应该怎么写呢?

抱歉,但我真的很困惑。我尝试了很多不同的方法,但现在我一筹莫展。


"(.)" (([0-9][0-9][0-9][0-9])) {(.)} - vladr
3个回答

3
这应该就可以了:
Pattern p = Pattern.compile("\"(.*?)\"\\s+\\((\\d{4})\\)\\s+\\{(.*?)\\}");
Matcher m = p.matcher("\"'Allo 'Allo!\" (1982) {A Barrel Full of Airmen (#7.7)}");
if (m.find()) {
  System.out.println(m.group());
  System.out.println(m.group(1));
  System.out.println(m.group(2));
  System.out.println(m.group(3));
}

输出:

"'Allo 'Allo!" (1982) {A Barrel Full of Airmen (#7.7)}
'Allo 'Allo!
1982
A Barrel Full of Airmen (#7.7)

可以更加选择地筛选年份(4位数字),以避免在输入不良的情况下出现误匹配。 - vladr
你的意思是指整个原始行,即 m.group(0) 吗? - vladr
哇哦,非常感谢,它有效了。但是我现在必须确保它适用于我的整个文本文件,大约有20Mb的大小。再次感谢你们。 - angad Soni
嗨,Cletus,你可以帮我回答我的另一个问题吗? - angad Soni

3

"[^"]*"\s*\([^)]*\)\s*\{[^}]*\}


如果标题包含双引号,则此操作将失败 :) - vladr

0

"[^"]+"\s([^)]+)\s{[^}]+}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接