有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#代码后动态编译。