当前位置: 代码迷 >> C# >> 跪求1正则表达式写法
  详细解决方案

跪求1正则表达式写法

热度:109   发布时间:2016-05-05 05:08:16.0
跪求一正则表达式写法
有5组数据,逗号隔开的,现在要验证 3组是数字,剩下两组是 ‘-’
123,456,123,-,-
但是“-”的位置可能在这个5个任意一个地方,
比如 123,-,555,-,999  也可能是这样 33333,777,-,-555
“-”的位置可能会出现任意地方,但是这回出现2个,剩下的就是数字。
格式就是这样  (数字,数字,-,-,数字)只是“-”的位置来回变化,
这个正则如何写呢?
------解决思路----------------------
根本用不到正则


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;
}

------解决思路----------------------
这不是正则干的活~
------解决思路----------------------
但此帖或许能给你些思路:  http://bbs.csdn.net/topics/380162205
------解决思路----------------------
我认为你的数据结构可以做成正则组,每个组可以设定N个正则表达式

正则表达式                              条件       匹配次数   描述
(?:^
------解决思路----------------------
,)-{1}[^-]*?(?:,
------解决思路----------------------
$)                ==       2           匹配2个-符号
,                                              ==        4           匹配4个逗号
\d.*?(?:,
------解决思路----------------------
$)                                ==         3            匹配必须含有3个数字

循环正则匹配,这样就可以灵活去做,大的复杂的肯定一个正则是不够的,你可以分次匹配,这些正则规则可以存在内存里面,不用每次数据库拿。
------解决思路----------------------
引用:
项目的数据格式五花八门的,这种这是其中一种。就是正则不好写。很纠结。


你能保证五花八门的数据格式全部可以用正则来解析吗?
给你一个建议,把数据的验证(或解析)做成插件的方式,能用正则的用正则,不能用正则的就用插件来扩展。
------解决思路----------------------
既然一定要用正则,那就罗列各种情况吧,好在就九种情况,正则如下:

"^(\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+)$"
------解决思路----------------------
你的需求不能用正则,如果你选择了正则,写正则的人不知道该如何下手。
如果有规律可循,你可以做一个可视化验证工具,选择有限的输入源,有限验证方式进行判断处理;如果无规律可循,那就只能选择CodeDOM来进行动态编译代码,将方法在运行时编译产生(记得缓存),不过这需要对方会C#,如果不会也有办法,但是就相对麻烦,你得写个傻瓜都会用的,类似易语言的开发工具,后台转换到C#代码后动态编译。