例如,
AM2 + 'G - D08 - 28 - 14 .xlsx]General Inputs'
应该拆分为
AM2
和'G - D08 - 28 - 14 .xlsx]General Inputs'
。
答案 0 :(得分:1)
对于您给定输入示例的类型,我可能会匹配vs拆分。
String s = "AM2 + 'G - D08 - 28 - 14 .xlsx]General Inputs'";
Pattern p = Pattern.compile("'[^']*'|[^ '+*/-]+");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
输出
AM2
'G - D08 - 28 - 14 .xlsx]General Inputs'
答案 1 :(得分:1)
我认为你不能用split
做到这一点 - 如果可以,那将是非常棘手和混乱的。 split
擅长寻找分隔符,但是当一个模式必须应用于分隔符之间的东西时就不那么好了,在这种情况下就是这样。
相反,我会使用正则表达式来查找分隔符之间出现的文本,并使用Matcher
方法。我看待这样的问题的方法是将非运算符文本视为一系列实体,其中每个实体都是
如果所有运算符都是一个字符,则找到“操作数”的正则表达式可能看起来像
('.*?'|[^'+\-*/])*
表示为任何不是+
,-
,*
的单个字符在引号,或之间查找任意数量的字符,或者/
(请注意,-
必须在角色类中进行转义)。最后*
表示查找此模式的零个或多个。
要查找运算符可能是多个字符的情况,例如<<
或>>
,您可以使用否定前瞻:
('.*?'|(?!\+|-|\*|/|<<|>>)[^'])*
表示在我们未查看+
,-
,*
,{{1}的位置找到带引号的字符串或非引号字符},/
或<<
,并发现此次零次或多次。
计划是使用>>
和匹配器来查找操作数,然后使用lookingAt()
查找运算符,然后前后移动。 (或者如果您根本不需要保留运算符,请使用@ {hwnd的答案中的lookingAt()
。)
注意:我没有对此进行测试。我可能有一些细节错误,但这应该让您了解最佳方法。