[英]How to Split a mathematical expression on operators as delimiters, while keeping them in the result?
[英]How to Split a String on mathematical operators as delimiters but escape operators inside quotes (in java)?
例如,
AM2 + 'G - D08 - 28 - 14 .xlsx]General Inputs'
应拆分为
AM2
和'G - D08 - 28 - 14 .xlsx]General Inputs'
。
对于给定输入示例的类型,我可能会匹配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'
我认为您无法使用split
进行此操作-如果可以的话,这将非常棘手且混乱。 split
擅长查找定界符,但是当必须将模式应用于定界符之间的内容时, split
不太好,在这种情况下会很合适。
相反,我将使用正则表达式来查找定界符之间出现的文本,并使用Matcher
方法。 我这样看待问题的方式是将非操作员文本视为一系列实体,其中每个实体都是
如果您所有的运算符都是一个字符,则找到“操作数”的正则表达式可能看起来像
('.*?'|[^'+\-*/])*
这表示要在引号之间查找任意数量的字符, 或者查找不是+
, -
, *
或/
任何单个字符(请注意-
必须在字符类内转义)。 最后一个*
表示寻找零个或多个该模式。
要查找一个运算符可能是多个字符(例如<<
或>>
,可以使用负向超前:
('.*?'|(?!\+|-|\*|/|<<|>>)[^'])*
这意味着在我们不查看+
, -
, *
, /
, <<
或>>
的点上找到带引号的字符串或非引号字符,并找到零次或多次。
计划是将lookingAt()
与匹配器一起使用来查找操作数,然后使用lookingAt()
来查找运算符,然后来回移动。 (或者,如果您根本不需要保留运算符,请使用@hwnd的答案中的find()
。)
注意:我尚未测试。 我可能有一些细节错误,但这应该使您对最佳方法有所了解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.