我现在有一四则运算表达式,需要将各运算数据提出来,请高手们指点,如以下运算式
中国/日本+(${进货/出货}+${日均量-按天算})-(美国*(韩国-朝鲜))*(M5-F8),通过正则运算按顺序提出
中国,日本,${进货/出货},${日均量-按天算},美国,韩国,朝鲜,M5,F8, 还要通过另一正则表达式提出运算符 /,+(,+,)-(,*(,-,))*(,-,) 注意:${进货/出货}, ${日均量-按天算} 为数据项,里面带的‘/’,‘-’符号不能做为运算符,也就是要求${}格式的里面可以放任何内容,只能做为数据项往外提, 运算表达式格式不固定,符合四则运算加括号。 求高手们用java给两个正则表达式
中国/日本+(${进货/出货}+${日均量-按天算})-(美国*(韩国-朝鲜))*(M5-F8),通过正则运算按顺序提出
中国,日本,${进货/出货},${日均量-按天算},美国,韩国,朝鲜,M5,F8, 还要通过另一正则表达式提出运算符 /,+(,+,)-(,*(,-,))*(,-,) 注意:${进货/出货}, ${日均量-按天算} 为数据项,里面带的‘/’,‘-’符号不能做为运算符,也就是要求${}格式的里面可以放任何内容,只能做为数据项往外提, 运算表达式格式不固定,符合四则运算加括号。 求高手们用java给两个正则表达式
Pattern pattern = Pattern.compile("[/+-[(][*][)]]+");
String[] strs = pattern.split("中国/日本+(${进货/出货}+${日均量-按天算})-(美国*(韩国-朝鲜))*(M5-F8)");
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
} 楼主,本人正则有限只能解决到这一步,但是${进货/出货}作为整理不能取出。
等待高人吧。
如果只是汉字和运算符号组成的字符串,或者只是数字和运算符号组成的字符串,都还好说。
lz最好能够说得明白一点。
比如上面的“中国”,是要提取“中国”这两个汉字,还是提取“中国”所代表的数字,比如12.5之类。
import java.util.regex.*;
public class Test {
public static void main(String[] args) {
// TODO 自动生成方法存根
String s="中国/日本+(${进货/出货}+${日均量-按天算})-(美国*(韩国-朝鲜))*(M5-F8)";
//提取操作数
System.out.println("提取的操作数如下:");
Pattern p = Pattern.compile("(([^(*/)+-[*]/()${}]+)|(\\$\\{.+?\\}))");
Matcher m=p.matcher(s);
while(m.find())
{
System.out.print(m.group()+",");
} // 提取运算符
System.out.println("\n提取的运算符如下:");
s=s.replaceAll("(\\$\\{.+?\\})", "");
p = Pattern.compile("([(*/)+-[*]/()])");
m=p.matcher(s);
while(m.find())
{
System.out.print(m.group()+",");
}
}}
程序运行结果:
提取的操作数如下:
中国,日本,${进货/出货},${日均量-按天算},美国,韩国,朝鲜,M5,F8,
提取的运算符如下:
/,+,(,+,),-,(,*,(,-,),),*,(,-,),