首页新闻找找看学习计划

求一个正则表达式验证十六进制字符串

0
悬赏园豆:10 [已关闭问题] 关闭于 2013-11-05 15:11

如题。求一个正则表达式,能验证十六进制数,并自动纠正错误
比如我发送一个十六进制数:adt 12 ce 63 02251 2634
然后经过正则表达式纠正后 :AD 12 CE 63 02 25 01 26 34

名字还没想好的主页 名字还没想好 | 初学一级 | 园豆:152
提问于:2013-10-23 15:20
< >
分享
所有回答(5)
0

此题用正则无解。通过其他的方式去格式话数据吧。

````` | 园豆:14268 (专家六级) | 2013-10-23 15:23

居然还有这种说法,以前别人就是用正则解决的,不过是c写的,我没有源码

支持(0) 反对(0) 名字还没想好 | 园豆:152 (初学一级) | 2013-10-23 17:01

@FreeEdgar: 因为无规则性。如果adt12ce 63 02251 2634 这样的呢?无规则性即使用正则也会考虑很多种可能,那是超级大的一个正则才能够搞定。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2013-10-23 17:04

@imfunny: 兄弟,这个问题,其实就是要做两件事,一个就是将不是0-9,a-f的字符去掉,二是将数据以空格读取,当然多个空格算一个,然后两两一读,不够两位的在后面的一位前面补零,最后用空格将去读的值已空格分开。我不懂正则,但是我相信肯定可以解决这个问题。

支持(0) 反对(0) 名字还没想好 | 园豆:152 (初学一级) | 2013-10-23 17:49

@FreeEdgar: 正则表达式能实现“纠正”这个功能?

支持(0) 反对(0) 会长 | 园豆:5544 (大侠五级) | 2013-10-23 18:03

@FreeEdgar: 嗯嗯,昨天看了想了下的确可能。等下午写下看看。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2013-10-24 09:18
0

十六进制的合法字符为:0-9,a-z,A-Z,检查源字符是否合法:^([0-9|a-z|A-Z]*)$,然后根据使用的语言选择处理源字符串的方式

HorsonJin | 园豆:158 (初学一级) | 2013-10-23 15:44
0

单单一条表达式 是做不了的

估计要用表达式进行匹配 分组 拆分 替换 结合 才能完成

Yu | 园豆:12944 (专家六级) | 2013-10-23 21:41
0

下面我把方法写下来,结贴!

string str="adt 12 ce 63 02251 2634";

    str=Regex.Replace(Regex.Replace(str,@"(?i)[^a-f\d\s]+",""),"\\w{3,}",
                            m=>string.Join(" ",Regex.Split(m.Value,@"(?<=\G\w{2})(?!$)").Select(x=>x.PadLeft(2,'0')).ToArray())).ToUpper();
    Console.WriteLine(str); //ad 12 ce 63 02 25 01 26 34
名字还没想好 | 园豆:152 (初学一级) | 2013-11-05 15:09

这个牛逼!!!

支持(0) 反对(0) Lthis | 园豆:200 (初学一级) | 2016-03-09 18:24
0
String str = "adt 12 ce 63 02251 26342".replaceAll("[^0-9abcdef]*([0-9abcdef])[^0-9abcdef]*([0-9abcdef]?)[^0-

9abcdef]*", "$1$2 ").trim().toUpperCase();

 

adai_m | 园豆:172 (初学一级) | 2016-11-21 23:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册