能解者是高手。。。

alisdk 2013-07-23 11:04:48
用正则,我想匹配 5位数字里,有两个8的一组
如:87837,12345,45678,
取:87837(只两个8)
只两个是8的,5位数。。
...全文
560 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunylf 2013-07-24
  • 打赏
  • 举报
回复
正則就是用來處理這些事的麼?
Sb梁先生 2013-07-24
  • 打赏
  • 举报
回复
我只是来看答案的
异常异长 2013-07-24
  • 打赏
  • 举报
回复
正则太费脑子了。小菜鸟路过。
q107770540 2013-07-24
  • 打赏
  • 举报
回复
^(?!([0-7]|9)+$)^(?!8+$)(?!([0-7]|9)*8([0-7]|9)*$)(?!(([0-7]|9)*8){3}([0-7]|9)*$)(?!(([0-7]|9)*8){4}([0-7]|9)*$)\d{5}$ 红色部分不需要
夏至夏未了 2013-07-24
  • 打赏
  • 举报
回复
刚学到正则 来看看学习下
tcmakebest 2013-07-23
  • 打赏
  • 举报
回复
这题有点难太费神还是期待高手吧
EnForGrass 2013-07-23
  • 打赏
  • 举报
回复
引用 6 楼 Chinajiyong 的回复:
(?(\d{5}(?=,|$))\d*?8[^,8]*?8[^8,]*)
借鉴了4L的写法,他那个好像有点问题,
EnForGrass 2013-07-23
  • 打赏
  • 举报
回复
(?(\d{5}(?=,|$))\d*?8[^,8]*?8[^8,]*)
EnForGrass 2013-07-23
  • 打赏
  • 举报
回复
引用 2 楼 alisdk 的回复:
我现在的需求,要求我只能有一句正则来实现,所以。。。但还是谢谢你。
因为8位置不固定,你这种需求一句正则有点难度
  • 打赏
  • 举报
回复
 string str = "87837,12345,45678";
            var result = Regex.Matches(str, @"(?(\d{5}(?=,|$))\d*?(8)[^\1]*?\1[^\1,]*)").OfType<Match>().Where(a=>!string.IsNullOrEmpty(a.Value)).Select(a=>a.Value);
qldsrx 2013-07-23
  • 打赏
  • 举报
回复
判断5个数字直接判断字符串长度,判断2个8用这个正则“\d*8\d*8\d*”,这两个必须分开判断。
alisdk 2013-07-23
  • 打赏
  • 举报
回复
我现在的需求,要求我只能有一句正则来实现,所以。。。但还是谢谢你。
EnForGrass 2013-07-23
  • 打赏
  • 举报
回复

 string numstr = "87837,12345,45678,68844";
            MatchCollection mc = Regex.Matches(numstr, @"\d{5}");
            foreach (Match mcnum in mc)
            {
                string num = mcnum.Value;
                if (num.ToCharArray().Where(x => x.ToString() == "8").Count() == 2)
                {
                    Console.WriteLine(mcnum.Value);
                }
            }
q107770540 2013-07-23
  • 打赏
  • 举报
回复
void Main()
{
	 string str="87837,12345,45678,114818";
	 Regex reg=new Regex(@"^(?!([0-7]|9)+$)^(?!8+$)(?!([0-7]|9)*8([0-7]|9)*$)(?!(([0-7]|9)*8){3}([0-7]|9)*$)(?!(([0-7]|9)*8){4}([0-7]|9)*$)\d{5}$");
	 foreach(string s in str.Split(','))
		Console.WriteLine("{0} --- {1}",s,reg.IsMatch(s));
}
q107770540 2013-07-23
  • 打赏
  • 举报
回复
期待 过客 更优的正则解法
  • 打赏
  • 举报
回复
都是牛人啊~~~~我只是来打酱油的
q107770540 2013-07-23
  • 打赏
  • 举报
回复
简化一下: ^(?!([0-7]|9)+$)^(?!8+$)(?!([0-7]|9)*8([0-7]|9)*$)(?!(([0-7]|9)*8){3}([0-7]|9)*$)(?!(([0-7]|9)*8){4}([0-7]|9)*$)\d{5}$
q107770540 2013-07-23
  • 打赏
  • 举报
回复
void Main()
{
	int[] ary=new int[]{87837,12345,45678,112481824};
	Regex reg=new Regex(@"^(?!([0-7]|9)+$)^(?!8+$)(?!([0-7]|9)*8([0-7]|9)*$)(?!([0-7]|9)*8([0-7]|9)*8([0-7]|9)*8([0-7]|9)*$)(?!([0-7]|9)*8([0-7]|9)*8([0-7]|9)*8([0-7]|9)*8([0-7]|9)*$)\d{5}$");
	foreach(int i in ary)
		Console.WriteLine("{0} --- {1}",i,reg.IsMatch(i.ToString()));
	/*
	87837 --- True
	12345 --- False
	45678 --- False
	112481824 --- False
	*/
}
q107770540 2013-07-23
  • 打赏
  • 举报
回复
排除法: ^(?!([0-7]|9)+$)^(?!8+$)(?!([0-7]|9)*8([0-7]|9)*$)(?!([0-7]|9)*8([0-7]|9)*8([0-7]|9)*8([0-7]|9)*$)(?!([0-7]|9)*8([0-7]|9)*8([0-7]|9)*8([0-7]|9)*8([0-7]|9)*$)\d{5}$
liuyilin777 2013-07-23
  • 打赏
  • 举报
回复
加载更多回复(1)

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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