算法基础——2.5正则表达式进阶

例一:

[java] view plain copy
  1. /*
  2. 计算表达式的值(假设只有加法、减法、乘法)
  3. 23+15-16*(25+(6-3)+9*2)
  4. */
  5. importjava.util.regex.*;
  6. publicclassT1
  7. {
  8. //计算没有括号的表达式
  9. staticStringcalcunoparen(Strings)
  10. {
  11. if(s.length()<1)returns;
  12. //先把所有乘法消除
  13. Patternpat=Pattern.compile("([0-9]+)\\*([0-9]+)");
  14. while(true){
  15. Matchermc=pat.matcher(s);
  16. if(mc.find()==false)break;//已经没有乘法了
  17. intres=Integer.parseInt(mc.group(1))*Integer.parseInt(mc.group(2));
  18. s=s.replace(mc.group(),res+"");//注意这里不能用replaceAll
  19. }
  20. //再从左到右消除所有加法或减法
  21. pat=Pattern.compile("([0-9]+)([\\+\\-])([0-9]+)");
  22. //已经没有运算符了
  23. intres=0;
  24. if(mc.group(2).equals("+"))
  25. res=Integer.parseInt(mc.group(1))+Integer.parseInt(mc.group(3));
  26. else
  27. 1))-Integer.parseInt(mc.group( s=s.replace(mc.group(),0); background-color:inherit">//注意这里不能用replaceAll
  28. }
  29. returns;
  30. //计算可能含有括号的表达式
  31. staticStringcalcu(Strings)
  32. s=s.replaceAll("+","");//消除空格
  33. Patternpat=Pattern.compile("\\(([^\\(\\)]*)\\)");
  34. break;
  35. //把括号内先计算,然后消除括号
  36. noparen(mc.group(1)));
  37. returncalcunoparen(s);
  38. staticvoidmain(String[]args)
  39. /*
  40. Strings="23+15-16*(25+(6-3*2*1)+9*2)";
  41. //任务:找到最内层括号中的内容,计算后替换掉
  42. */
  43. System.out.println(calcu("5+3*2*(2+2-3)-1"));
  44. }
例二:

    /*第02讲-正则表达式进阶_展开串
  1. 实际开发中,常常会出现用到一批文件,而这些文件文件名有某种规律,我们在表述的时候,往往习惯简写,但这样程序又不好识别。
  2. 比如:
  3. c:/abc/xyz/k[11..19].dat
  4. 实际表示的就是:
  5. c:/abc/xyz/k11.dat
  6. c:/abc/xyz/k12.dat
  7. c:/abc/xyz/k13.dat
  8. c:/abc/xyz/k14.dat
  9. c:/abc/xyz/k15.dat
  10. c:/abc/xyz/k16.dat
  11. c:/abc/xyz/k17.dat
  12. c:/abc/xyz/k18.dat
  13. c:/abc/xyz/k19.dat
  14. 本题目要求是:给定一个含有简写的串,要求展开为所有文件名。
  15. 简写的格式为:[整数..整数]*/
  16. classC5{
  17. voidmain(String[]args){
  18. Strings="c:/abc/xyz/k[11..19].dat";
  19. intbegin=0,end= Patternpat=Pattern.compile("\\[([0-9]+)..([0-9]+)\\]");
  20. Matchermc=pat.matcher(s);
  21. if(mc.find()){
  22. begin=Integer.parseInt(mc.group(1));//第一个文件
  23. end=Integer.parseInt(mc.group(2));//最后一个文件
  24. for(inti=begin;i<=end;++i){
  25. System.out.println(s.replaceAll("\\[([0-9]+)..([0-9]+)\\]",i+""));
  26. }

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...