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

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个零为一组。


这样的正则表示式怎么写? 有没有人能给个答案,不甚感激!
...全文
286 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)
内容概要:本文系统研究了基于交替方向乘子法(ADMM)的多主体综合能源系统分布式协同优化方法,旨在实现多个能源主体之间的高效、隐私保护的能量协同管理。通过建立各主体的局部优化模型,并引入一致性约束条件,利用ADMM算法将集中式优化问题分解为多个分布式子问题进行迭代求解,从而在保证各主体数据隐私的同时达成全局协同优化目标。研究涵盖了模型构建、算法实现、收敛性分析及数值仿真全过程,并提供了完整的Matlab代码实现,有效复现了相关学术成果,具有较强的可验证性与可拓展性。; 适合人群:具备一定数学建模能力与优化理论基础,熟悉Matlab编程,从事综合能源系统、分布式优化算法、电力系统调度等相关方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握ADMM算法在多主体能源系统协同优化中的建模与实现方法;② 构建支持隐私保护的分布式能源调度系统;③ 利用开源代码开展算法改进、性能测试或应用于实际系统的二次开发与科研论文复现; 阅读建议:建议结合凸优化与分布式计算的基础知识,深入理解增广拉格朗日函数构造、对偶更新与收敛判据的设计原理,在代码调试过程中重点关注惩罚参数选取、变量分裂策略及通信机制的实现细节,以全面掌握算法的核心机制与工程应用要点。

62,622

社区成员

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

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