我坚持使用这个正则表达式。
所以,我输入了:
最后我想得到的是:
我试过正则表达式
(\'[^\']*\')|(\"[^\"]*\")|([^,]+)|\\s*,\\s*
如果括号内没有逗号,则可以正常工作。
答案 0 :(得分:3)
<强>正则表达式强>
(\w+\s)?("[^"]+"|\w+)(\(\w\d(,\w\d)*\))?
Java代码
String input = ... ;
Matcher m = Pattern.compile(
"(\\w+\\s)?(\"[^\"]+\"|\\w+)(\\(\\w\\d(,\\w\\d)*\\))?").matcher(input);
while(matcher.find()) {
System.out.println(matcher.group());
}
<强>输出强>
"Crane device, (physical object)"(X1,x2,x4)
not "Seen by research nurse (finding)"
EntirePatellaBodyStructure(X1,X8)
not "Besnoitia wallacei (organism)"(X1,x2,x4)
not "Catatropis (organism)"(X1,x2,x4)
not IntracerebralRouteQualifierValue
not "Diospyros virginiana (organism)"(X1,x2,x4)
not SuturingOfHandProcedure(X1)
答案 1 :(得分:1)
不要使用正则表达式。编写一个简单的解析器,跟踪遇到的括号数,以及是否在引号内。有关详细信息,请参阅:RegEx match open tags except XHTML self-contained tags
答案 2 :(得分:0)
这会做你需要的吗?
System.out.println(yourString.replaceAll(", not", "\nnot"));
答案 3 :(得分:0)
假设()
内()
不可能嵌套\"
,""
内没有可能(例如)private static final Pattern CUSTOM_SPLIT_PATTERN =
Pattern.compile("\\s*((?:\"[^\"]*\"|[(][^)]*[)]|[^\"(]+)+)");
private static final String[] customSplit(final String input) {
final List<String> ret = new ArrayList<String>();
final Matcher m = CUSTOM_SPLIT_PATTERN.matcher(input);
while(m.find()) {
ret.add(m.group(1));
}
return ret.toArray(new String[ret.size()]);
}
,你可以这样写:
{{1}}
(免责声明:未经测试)。