跪求一正则表达式写法

邋遢的土豆 2015-01-16 11:46:40
有5组数据,逗号隔开的,现在要验证 3组是数字,剩下两组是 ‘-’
123,456,123,-,-
但是“-”的位置可能在这个5个任意一个地方,
比如 123,-,555,-,999 也可能是这样 33333,777,-,-555
“-”的位置可能会出现任意地方,但是这回出现2个,剩下的就是数字。
格式就是这样 (数字,数字,-,-,数字)只是“-”的位置来回变化,
这个正则如何写呢?
...全文
292 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
致命的土豆 2015-01-20
  • 打赏
  • 举报
回复
^(?:[\d]+|-)(?:,(?:\d+|-)){4}$先验证格式 在验证-的个数
alex_suen 2015-01-19
  • 打赏
  • 举报
回复
可参考这个博客中 正则表达式进行组合 http://blog.csdn.net/s_521_h/article/details/41977739
qldsrx 2015-01-19
  • 打赏
  • 举报
回复
你的需求不能用正则,如果你选择了正则,写正则的人不知道该如何下手。 如果有规律可循,你可以做一个可视化验证工具,选择有限的输入源,有限验证方式进行判断处理;如果无规律可循,那就只能选择CodeDOM来进行动态编译代码,将方法在运行时编译产生(记得缓存),不过这需要对方会C#,如果不会也有办法,但是就相对麻烦,你得写个傻瓜都会用的,类似易语言的开发工具,后台转换到C#代码后动态编译。
相思梦 2015-01-18
  • 打赏
  • 举报
回复
string[] str = content.Split(','); string condit = "0123456789"; int i = 0; len = str.Length; for(; I < len; i++) { if(condit .IndexOf(str[i]) > 0) { // TD:OO Where You‘s Code } }
sxldfang 2015-01-18
  • 打赏
  • 举报
回复
既然一定要用正则,那就罗列各种情况吧,好在就九种情况,正则如下: "^(\d+,\d+,\d+,-,-|\d+,\d+,-,\d+,-|\d+,-,\d+,\d+,-|-,\d+,\d+,\d+,-|\d+,\d+,-,-,\d+|\d+,-,\d+,-,\d+|-,\d+,\d+,-,\d+|\d+,-,-,\d+,\d+|-,\d+,-,\d+,\d+|-,-,\d+,\d+,\d+)$"
effun 2015-01-17
  • 打赏
  • 举报
回复
引用 8 楼 qq408146580 的回复:
项目的数据格式五花八门的,这种这是其中一种。就是正则不好写。很纠结。
你能保证五花八门的数据格式全部可以用正则来解析吗? 给你一个建议,把数据的验证(或解析)做成插件的方式,能用正则的用正则,不能用正则的就用插件来扩展。
willhuo 2015-01-16
  • 打赏
  • 举报
回复
真是的,split一下,循环判断。。。用不到正则表达式
  • 打赏
  • 举报
回复
string inputStr="";
if(Regex.Matches(inputStr,"\d+").Count==3&®ex.Matches(inputStr,"[-]").Count==2)
{
//满足条件了
}
於黾 2015-01-16
  • 打赏
  • 举报
回复
不要什么问题都正则 这种问题,自己Split(',')分解出来,循环判断一下不就得了
以夕阳落款 2015-01-16
  • 打赏
  • 举报
回复
还是split来得快啊,虽然代码多点,但是效率高多了
S314324153 2015-01-16
  • 打赏
  • 举报
回复
正则也不是万能的,有些工作量是省不了得,你现在这种情况用split分组之后再判断比较快
ajaxfeifei 2015-01-16
  • 打赏
  • 举报
回复
我认为你的数据结构可以做成正则组,每个组可以设定N个正则表达式 正则表达式 条件 匹配次数 描述 (?:^|,)-{1}[^-]*?(?:,|$) == 2 匹配2个-符号 , == 4 匹配4个逗号 \d.*?(?:,|$) == 3 匹配必须含有3个数字 循环正则匹配,这样就可以灵活去做,大的复杂的肯定一个正则是不够的,你可以分次匹配,这些正则规则可以存在内存里面,不用每次数据库拿。
q107770540 2015-01-16
  • 打赏
  • 举报
回复
但此帖或许能给你些思路: http://bbs.csdn.net/topics/380162205
q107770540 2015-01-16
  • 打赏
  • 举报
回复
这不是正则干的活~
邋遢的土豆 2015-01-16
  • 打赏
  • 举报
回复
项目的数据格式五花八门的,这种这是其中一种。就是正则不好写。很纠结。
邋遢的土豆 2015-01-16
  • 打赏
  • 举报
回复
以上朋友,用正则的原因是因为要做一个平台,里面要处理很多类似的数据,可能类似这种结果的有上百种,如果都写成代码可能代码量太大了。都是通过后台动态配制。不同配置,结果也不同,所以需要正在来限制死结果格式。这样防止提交的时候会出现问题。或者绕过前台验证代码提交。
effun 2015-01-16
  • 打赏
  • 举报
回复
根本用不到正则

public static bool ValidateData(string data)
{
  string[] array = data.Split(',');
  if (array.Length == 5)
  {
    int count1 = 0, count2 = 0;
    foreach (string s in array)
    {
      double test;

      if (count2 == "-") count2++;
      else if (double.TryParse(s, out test)) count1++;
      else break;
    }
    return count1 == 3 && count2 == 2;
  }
  return false;
}
qldsrx 2015-01-16
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
string inputStr="";
if(Regex.Matches(inputStr,"\d+").Count==3&®ex.Matches(inputStr,"[-]").Count==2)
{
//满足条件了
}
你这样的话,分隔符不是逗号的情况也会满足条件的,出现大于5组数据的情况也会满足条件。 这里从需求分析的话,必须先splite分割字符串,确保分割后是5个字符串的数组,再判断里面的元素是数字和减号的个数。
ajaxfeifei 2015-01-16
  • 打赏
  • 举报
回复
只会出现两个?然后会不会有负数?

110,534

社区成员

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

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

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