关于一个正则表达式的问题,在线等

allenmylab 2009-12-31 09:35:16
我想把这样的字符串分开“E{abc}P{abc}JS{abc}”,想分成以“E|P|JS{}”的字符串,即E{abc},P{abc},JS{abc}。
要用正则表达式分开,非常感谢!
...全文
131 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
allenmylab 2010-01-05
  • 打赏
  • 举报
回复
非常感谢大家的帮助,特别是“goldenfish1919”,结帖给分!
另外,希望goldenfish1919能给解释一下那个表达式,本人对这个不太熟悉,谢了先!
allenmylab 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 goldenfish1919 的回复:]
也是刚学习不久,不是很明白,连猜加蒙的。
([EP]|(JS))\\{.*?\\}[^(EP|(JS))]*就是:E,P或者JS开头,后面跟着{,后面是非贪婪任意多个字符,后面是},后面跟着不是E,P,JS的任意多个字符。
其实可以简化为:
([EP]|(JS)).*?[^EP|(JS)]*//E,P,JS开头,后面是非贪婪任意多个字符,后面是不是E,P,JS的任意多个字符
([EP]|(JS)).*?(?=[EP]|(JS)|\\z)//E,P,JS开头,后面是非贪婪任意多个字符,后面应该出现的是E,P或JS或输入的结尾。
貌似都可以

[/Quote]
非常感谢!
若鱼1919 2010-01-05
  • 打赏
  • 举报
回复
也是刚学习不久,不是很明白,连猜加蒙的。
([EP]|(JS))\\{.*?\\}[^(EP|(JS))]*就是:E,P或者JS开头,后面跟着{,后面是非贪婪任意多个字符,后面是},后面跟着不是E,P,JS的任意多个字符。
其实可以简化为:
([EP]|(JS)).*?[^EP|(JS)]*//E,P,JS开头,后面是非贪婪任意多个字符,后面是不是E,P,JS的任意多个字符
([EP]|(JS)).*?(?=[EP]|(JS)|\\z)//E,P,JS开头,后面是非贪婪任意多个字符,后面应该出现的是E,P或JS或输入的结尾。
貌似都可以
fengshiyan1943 2010-01-04
  • 打赏
  • 举报
回复
asd
zhuwen9 2010-01-01
  • 打赏
  • 举报
回复
楼上的思路很有意思
赞一个!
虽然不是正则
若鱼1919 2009-12-31
  • 打赏
  • 举报
回复

public class RegTest{
public static void main(String rags[]){
String source="E{abc}P{abc}JS{abc}";
java.util.regex.Pattern p=java.util.regex.Pattern.compile(".*?\\{.*?\\}");
java.util.regex.Matcher m=p.matcher(source);
while(m.find()){
System.out.println(m.group());
}
}
}
Thinking_In_IT 2009-12-31
  • 打赏
  • 举报
回复
不需要正则啊

这个直接replace 就可以了 将"}" 替换成"},"


public class Test{
public static void main(String[] args){
String s="E{abc}P{abc}JS{abc}";

System.out.println(s.replace("}","},"));
}
}

Thinking_In_IT 2009-12-31
  • 打赏
  • 举报
回复
假设数据时这样的:

E{a{s}bc}P{ab{asa}c}JS{a{}bc}

输出:
E{a{s}bc}
P{ab{asa}c}
JS{a{}bc}

思路分析:
定义 flag=0
首先循环查找“E{a{s}bc}P{ab{asa}c}JS{a{}bc}”中的每一个字符,

1) 遇到“{” 时 flag++
2) 遇到“}” 时 flag--
3) 当flag==0时,则输出


代码如下:
------------------------------------------------------------

public class Test{
public static void main(String[] args){
String c="E{a{s}bc}P{ab{asa}c}JS{a{}bc}";
StringBuilder sb=new StringBuilder();
int flag=0;
for(int i=0;i<c.length();i++){
sb.append(String.valueOf(c.charAt(i)));
if(c.charAt(i)=='{'){
flag++;
}else if(c.charAt(i)=='}'){
flag--;
if(flag==0){
System.out.println(sb);
sb.delete(0,sb.length());
}
}
}
}
}
若鱼1919 2009-12-31
  • 打赏
  • 举报
回复

java.util.regex.Pattern p=java.util.regex.Pattern.compile("([EP]|(JS))\\{.*?\\}[^(EP|(JS))]*");
Thinking_In_IT 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 allenmylab 的回复:]
用上面的方法是这样的结果:
E{a{s}
P{ab{asa}
JS{a{}
可我想要的是:
E{a{s}bc}
P{ab{asa}c}
JS{a{}bc}
[/Quote]

你这个很像 解析一个JSON数组啊
allenmylab 2009-12-31
  • 打赏
  • 举报
回复
用上面的方法是这样的结果:
E{a{s}
P{ab{asa}
JS{a{}
可我想要的是:
E{a{s}bc}
P{ab{asa}c}
JS{a{}bc}
若鱼1919 2009-12-31
  • 打赏
  • 举报
回复

public class RegTest2{
public static void main(String rags[]){
String source="E{a{s}bc}P{ab{asa}c}JS{a{}bc}";
java.util.regex.Pattern p=java.util.regex.Pattern.compile("[EP]\\{.*?\\}|JS\\{.*?\\}");
java.util.regex.Matcher m=p.matcher(source);
while(m.find()){
System.out.println(m.group());
}
}
}
allenmylab 2009-12-31
  • 打赏
  • 举报
回复
非常感谢以上两位的回答,不过还有些问题。也可能是我没有说的太明白,在我的程序里会有三种格式的字符串:E{*****},P{*****},JS{******},这三个可以以任意的次序出现,也可以出现多次,而且{}之间可能会有"{"或者"}"出现。二楼的朋友给出的答案有些问题,请再帮帮忙。
发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2009-12-31 09:35
社区公告
暂无公告