正则表达式 截串问题~~~~~ 正则表达式 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.util.*;class reg{ public static void main(String args[]){ String s="品名哈哈别名英文名gaga"; s=s.replaceAll("品名(.*)别名(.*)英文名(.*)","$1,$2,$3");//用","分割得到的各个名称 System.out.println(s); String ss[]=s.split(",");//再用","切割一下就可以了 for(String str:ss){ System.out.println(str); } }} (品名.*)(别名.*)(英文名.*)这样写的话意思就是必须有三个输出项,但是看你后面的描述有的时候会出现 “品名硝铵英文名Ammonium nitrate” 这种情况, 也就是说并不是所有的字符串都严格的按照你的正则格式构成所以就需要用 或 来处理。修改成这样你再试一下 (1)((品名.*)(别名.*)(英文名.*))|((品名.*)(英文名.*)) 用“或”来处理(2)(品名.*)(别名.*){0,1}(英文名.*) 用花括号表示个数 {0 , 1} 表示 0个 或者 1 个,即 :(别名.*)出现一次或者不出现快两年多没写过正则了 不知道上面的对不对 你在正则工具里面验证一下 在修改一下就行 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); } }} System.out.println("品名硝铵别名硝酸铵英文名Ammonium nitrate".replaceAll("品名(.*?)(别名(.*?))?英文名(.*?)", "$1,$3,$4")); System.out.println("品名硝铵英文名Ammonium nitrate".replaceAll("品名(.*?)(别名(.*?))?英文名(.*?)", "$1,$3,$4"));@zhouren1314 的方法更直观哈哈 嗯,确实可行,但是如果串中有更多相关属性的话式子(品名xx别名xx英文名xx熔点xx沸点xx...)就会变得更复杂(不过这点我也没提到,不能怪仁兄)相比较而言,还是5l兄的更适用 自己写的一个Java截屏组件 如何实现远程登陆 通过java如何给word文档加上文档保护? 为什么我用JAVA显示系统日期有错误 请问如何把某一语句锁住,直到它执行完毕!小女子先谢过了 小妹在此求一本书 jdbc向数据库里插数据为什么commit了数据库里还是没有数据 JBuilder->Wizard->Native Executive Archive下的问题 在JAVA中如何实现在一个长字符串查找某个字符串?? 大侠们帮我看一个程序(80分)。 GregorianCalendar类构造方法的问题 一道关于循环的题(随机生成10个不重复的数字)
class reg
{
public static void main(String args[]){
String s="品名哈哈别名英文名gaga";
s=s.replaceAll("品名(.*)别名(.*)英文名(.*)","$1,$2,$3");//用","分割得到的各个名称
System.out.println(s);
String ss[]=s.split(",");//再用","切割一下就可以了
for(String str:ss){
System.out.println(str);
}
}
}
这样写的话意思就是必须有三个输出项,
但是看你后面的描述
有的时候会出现 “品名硝铵英文名Ammonium nitrate” 这种情况, 也就是说并不是所有的字符串都严格的按照你的正则格式构成
所以就需要用 或 来处理。修改成这样你再试一下
(1)((品名.*)(别名.*)(英文名.*))|((品名.*)(英文名.*)) 用“或”来处理
(2)(品名.*)(别名.*){0,1}(英文名.*) 用花括号表示个数 {0 , 1} 表示 0个 或者 1 个,即 :(别名.*)出现一次或者不出现
快两年多没写过正则了 不知道上面的对不对 你在正则工具里面验证一下 在修改一下就行
Matcher matcher= Pattern.compile("(品名(.*?)|别名(.*?))(?=别|英)|英文名(.*)").matcher(s);
while( matcher.find()){
System.out.println(matcher.group().replaceAll("品名|别名|英文名", ""));
}
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);
}
}
}
System.out.println("品名硝铵英文名Ammonium nitrate".replaceAll("品名(.*?)(别名(.*?))?英文名(.*?)", "$1,$3,$4"));
@zhouren1314 的方法更直观哈哈
嗯,确实可行,但是如果串中有更多相关属性的话式子(品名xx别名xx英文名xx熔点xx沸点xx...)就会变得更复杂(不过这点我也没提到,不能怪仁兄)
相比较而言,还是5l兄的更适用