2016-12-23 43 views
-1

我有这个字符串变量:切割字符串变量与正则表达式

String a = "Chris Weitz (screenplay), Tony Gilroy (screenplay) Lucasfilm Allison Shearmur Productions Black Hangar Studios"; 

它可以包含一个或两个“名称Surename(工作)”用逗号分隔的格局。

如何使用正则表达式成功切割除这些模式以外的所有内容?它应该是这样的结尾:

a = "Chris Weitz (screenplay), Tony Gilroy (screenplay)"; 

或像这样:

a = "Chris Weitt (screenplay)"; 

谢谢你们。

+3

如果你真的确定逗号分开了,你可以使用'a.split(“,”)'它会返回字符串数组作为'Chris Weitt(剧本)' – Babel

+0

问题是,这只会与对于一个“Name Surename(Job”Pattern),第二个不会用逗号隔开 – codemice

+0

你试过了什么?基本上你想删除任何其他字符串,但匹配'([[:alpha:]] + \([[:alpha:]] + \))'? –

回答

1
String s = "Chris Weitz (screenplay), Tony Gilroy (screenplay) Lucasfilm Allison Shearmur Productions Black Hangar Studios"; 
Pattern p = Pattern.compile("[^,\\(]+\\([^\\)]+\\)"); 
Matcher m = p.matcher(s); 
while(m.find()) { 
    System.out.println(m.group().trim()); 
} 
+0

虽然该代码确实有效,但您应该考虑至少添加一个简短说明。 –

0

删除一切从最后)向前(即,空白替换):

str = str.replaceAll("\\)[^)]*$", ")"); 

正则表达式的闭合支架贯穿始终相匹配,而不会遇到另一个右括号。

0

诠古温德·辛格回答位..(和改变正则表达式模式)

String s = "Chris Weitz (screenplay), Tony Gilroy (screenplay) Lucasfilm Allison Shearmur Productions Black Hangar Studios"; 
Pattern p = Pattern.compile("([[:alpha:] ]+\\([[:alpha:]]+\\))"); 
Matcher m = p.matcher(s); 
while(m.find()) { 
    System.out.println(m.group().trim()); 
} 

的想法是将字符串与给定的模式匹配 - ([[:alpha:] ]+\([[:alpha:]]+\)) - 基本上捕获随后是对任何单词括号。 - regex101