当前位置: 代码迷 >> J2SE >> 正则表达式 截串有关问题~
  详细解决方案

正则表达式 截串有关问题~

热度:13   发布时间:2016-04-23 20:45:42.0
正则表达式 截串问题~~~~~
数据诸如 “品名硝铵别名硝酸铵英文名Ammonium nitrate” 这样的字符串


我想截出品名、别名以及英文名的部分,如"硝铵","硝酸铵","Ammonium nitrate"


我写的正则表达式:regex = "(品名.*)(别名.*)(英文名.*)"
得到“品名硝铵","别名硝酸铵","英文名Ammonium nitrate”
然后再截一次就好了(正则表达式用得很水的说,暂时只会这么写)


但是如果字符串为 “品名硝铵英文名Ammonium nitrate” 没有别名部分的话,我写的正则表达式就没效果了。

如果我想达到预期效果要怎么改呢?
------解决方案--------------------
 
 String s="品名硝铵别名硝酸铵英文名Ammonium nitrate";
       Matcher matcher= Pattern.compile("(品名(.*?)
------解决方案--------------------
别名(.*?))(?=别
------解决方案--------------------
英)
------解决方案--------------------
英文名(.*)").matcher(s);
       while( matcher.find()){
        System.out.println(matcher.group().replaceAll("品名
------解决方案--------------------
别名
------解决方案--------------------
英文名", ""));
       }

------解决方案--------------------
import java.util.*;
class reg
{
public static void main(String args[]){
//String s="品名哈哈别名呵呵英文名gaga";
String s="品名哈哈英文名gaga";
s=s.replaceAll("品名
------解决方案--------------------
别名
------解决方案--------------------
英文名",",");//用","分割得到的各个名称
System.out.println(s);
String ss[]=s.split(",");//再用","切割一下就可以了
for(String str:ss){
System.out.println(str);
}

}
}