[闭月羞花猫] ~~~~~~~~~~~~~~~~~求一正则表达式~~~~~~~~~~~~~~~~~~~~~~~

luyang1016 2007-10-31 03:08:29
本来虽然也看过一些正则表达式的用法/ 但是对于有些需求还是不知道从何下手。
现在工作中,遇到一个问题,求一正则表达式!

需求:
010003000000000

对于上面的一个字符窜,每3个 0 为一组, 从后面往前开始遍历,直到发现 某一组的3个数里面有一个不是0,那么遍历结束,返回这一组以前的所有数字

对于上例,去掉 最后3组最后9个0之后, 结果为 010003

另外再举个例子
000010003000000000, 去掉 最后3组最后9个0之后, 结果为 000010003

最后, 其实对于到底每几个 0 为一组,最好还可以随意设置,比如,我可以要 4个0 为一组,可以要5个零为一组。


这样的正则表示式怎么写? 有没有人能给个答案,不甚感激!
...全文
255 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoubsh 2007-11-01
  • 打赏
  • 举报
回复
哦 字先生你太猛了! 哦
luyang1016 2007-10-31
  • 打赏
  • 举报
回复
TYRO729 小单 同样表示感谢

我的msn: luyang1016@hotmail.com
luyang1016 2007-10-31
  • 打赏
  • 举报
回复
lyhk21 用不用msn的?
luyang1016 2007-10-31
  • 打赏
  • 举报
回复
lyhk21 多谢了啊!
TYRO729 2007-10-31
  • 打赏
  • 举报
回复
强~~~~~真执着,哈哈
lyhk21 2007-10-31
  • 打赏
  • 举报
回复
是可忍孰不可忍,终于试成功了,哈哈!
lyhk21 2007-10-31
  • 打赏
  • 举报
回复

晕,刚才用的是FireFox,不能插入Java Code,再试一次

[code=Java]
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}

TYRO729 2007-10-31
  • 打赏
  • 举报
回复
哈哈,lyhk21你就忍了吧,新论坛总是有惊喜的,哈哈,我paste的你那个正则也没空格的,结果上来一看还是有
lyhk21 2007-10-31
  • 打赏
  • 举报
回复
晕,刚才用的是FireFox,不能插入Java Code,再试一次


public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
lyhk21 2007-10-31
  • 打赏
  • 举报
回复
晕,刚才用的是FireFox,不能插入Java Code,再试一次

public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
luyang1016 2007-10-31
  • 打赏
  • 举报
回复
这个问题就不知道了啊


lyhk21 2007-10-31
  • 打赏
  • 举报
回复
怎么还添加空格呢?
lyhk21 2007-10-31
  • 打赏
  • 举报
回复
/*
我知道怎么回事了,没有"禁用UBB",导致网页自动帮我添加了空格
*/
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
luyang1016 2007-10-31
  • 打赏
  • 举报
回复
恩,想像中就应该写成这个样子的/ 谢谢大家!!!!!
luyang1016 2007-10-31
  • 打赏
  • 举报
回复
lyhk21 的写法是正确的,刚才是个是问题
TYRO729 2007-10-31
  • 打赏
  • 举报
回复
to lyhk21:
问题找到了,直接从这copy下去的正则里面有空格
改成((0{"+N+"})*)$就没问题了

还有那个数字最后一位也是空格,所以匹配的时候也没成功,哈哈

to lz:
lyhk21的那个式子好用,哈哈
JhunHoonXZ 2007-10-31
  • 打赏
  • 举报
回复
TO TYRO729
"((0{ "+N+ "})*)$ "
^ ^
有两个空格,删掉就好
luyang1016 2007-10-31
  • 打赏
  • 举报
回复
lyhk21

似乎有问题啊,没有效果的拉

你测试过没有?
luyang1016 2007-10-31
  • 打赏
  • 举报
回复
问,如果字符串全为0希望如何处理?

=================


这个case不需要考虑,业务可以保证不会全0
lyhk21 2007-10-31
  • 打赏
  • 举报
回复
你在试一试下面这个,可能是你插入了不合法的符号.如果字符串全为0,道理一样呀,只是返回m个0,m<N
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
加载更多回复(9)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧