java 正则 第一个出现的字符_如何用正则表达式通过第一个出现的字符进行拆分?...

更多追问追答

追问

只想用正则表达式,想一步到位

追答

用正则表达式比上面的方法麻烦,并且运行速度慢,你要非用正则表达式,不知下面这样的Java程序得到的结果,行不行。public class KK {

public static void main(String[] args) {

String s="第一篇第二篇第三篇第四篇";

String regex="[\u7BC7]+";

String[]str=s.split(regex);

String s1=str[0]+"\u7BC7";

String s2="";

for(int i=1;i

s2=s2+str[i]+"\u7BC7";

System.out.println(s1);

System.out.println(s2);

}

}

运行结果:

第一篇

第二篇第三篇第四篇

追问

我换成(^.*?\u7BC7)就很接近了,只想用正则表达式,不要搞什么常规拆分了。

追答

这样我看应该行了。import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class KK {

public static void main(String[] args) {

String s="第一篇第二篇第三篇第四篇";

String regex=".+?[\u7BC7]+";

Pattern p=Pattern.compile(regex);

Matcher m=p.matcher(s);

String s1="";

String s2="";

int count=0;

while(m.find()){

if(count==0){

s1=m.group();

count++;

}else{

s2=s2+m.group();

count++;

}

}

System.out.println(s1);

System.out.println(s2);

}

}

运行结果:

第一篇

第二篇第三篇第四篇

追问

不妥啊,大哥,你这种花太多代码来写了,\u7BC7(?!.*\u7BC7)已经很接近了,是匹配最后一个“篇”的,有没有办法匹配第一个“篇”?

追答

你匹配了第一个"篇"怎么匹配后面的字符串呢,象你说的可以用"^.*?\u7BC7"来匹配第一个"篇"

后面的怎么办呢,再用另一个正则表达式,再匹配一遍?

追问

我只要匹配第一个“篇”就够了,后面的不匹配了。

追答

用你说的正则表达式:^.*?\u7BC7

就可以匹配第一个"篇".我还是建议你用string的indexOf和substring函数来处理这个问题

完整的Java程序如下:import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class KK {

public static void main(String[] args) {

String s="第一篇第二篇第三篇第四篇";

String regex="^.*?\u7BC7";

Pattern p=Pattern.compile(regex);

Matcher m=p.matcher(s);

while(m.find()){

System.out.println(m.group());

}

}

}

运行结果:

第一篇

追问

我只想匹配第一个“篇”字,而不是“第一篇”,只要一个字,不是三个字。

追答

用正则表达式:^.*?(\u7BC7)   取第一捕获组的数据就是第一个"篇"字

完整的Java程序如下:import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class KK {

public static void main(String[] args) {

String s="第一篇第二篇第三篇第四篇";

String regex="^.*?(\u7BC7)";

Pattern p=Pattern.compile(regex);

Matcher m=p.matcher(s);

while(m.find()){

System.out.println(m.group(1));

}

}

}

运行结果:

追问

c7b06a241683cf0f3c40b005fcb8620f.png

2eefdc7845993072dd70fc64dc28557e.png

我要一步到位的,var array=Regex.Split("第一篇第二篇第三篇第四篇", "正则表达式"),一句话就能搞定,拆出来的数组array[0]="第一",array[1]=“第二篇第三篇第四篇”,拆出来的array[0]+="篇"就实现拆分成两组的功能,不用写多余的代码。

1a91994e6c4a642135d550f078e9537f.png

64e6f56febebd23c1f87a3cc4c61e0f8.png

追答

我想起来了,可以用一个正则表达式分割两个字符串的。

正则表达式:^(.*?\u7BC7)(.*)$

取第一和第二捕获组的数据,就是"第一篇" 和"第二篇第三篇第四篇"

具体的Java语言的例子如下:import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class KK {

public static void main(String[] args) {

String s="第一篇第二篇第三篇第四篇";

String regex="^(.*?\u7BC7)(.*)$";

Pattern p=Pattern.compile(regex);

Matcher m=p.matcher(s);

if(m.matches()){

System.out.println(m.group(1));

System.out.println(m.group(2));

}

}

}

运行结果:

第一篇

第二篇第三篇第四篇

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值