正则表达式:是否为十六进制

OneOnce 2017-09-11 09:50:43
从文本读出的字符串中如何识别十六进制数值:

十六进制字符串格式: 0x12, 0x1a, a0, ab

可能包含0x也由可能不包含,如果不包含0x,又不包含a~z/A~Z/0~9那么就认为不是十六进制

下面这样不行:
string pattern = @"\b(0[xX])?[A-Fa-f0-9]+\b";
bool isHexNum = Regex.IsMatch(str, pattern);


遇到下面情况不行:

(1) "0x3a@0x01"

(2) "0)"
...全文
1258 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
OneOnce 2017-09-12
  • 打赏
  • 举报
回复
引用 9 楼 ilikeff8 的回复:
其实我觉得正则是反人类的
引用 9 楼 ilikeff8 的回复:
其实我觉得正则是反人类的
ilikeff8 2017-09-11
  • 打赏
  • 举报
回复
其实我觉得正则是反人类的
  • 打赏
  • 举报
回复
引用 6 楼 OneOnce 的回复:
[quote=引用 4 楼 chb345536638 的回复:] (?i)已经不区分大小写了,你有什么数据没通过?
你那个工具好像挺牛的~[/quote] 恩,叫regexbuddy,你可以自己下载用用看的
  • 打赏
  • 举报
回复
引用 5 楼 OneOnce 的回复:
[quote=引用 4 楼 chb345536638 的回复:] (?i)已经不区分大小写了,你有什么数据没通过?
非常感谢, 字符串: 0) 不能匹配[/quote] 也就是说你一开始说的 (1) "0x3a@0x01" (2) "0)" 这两个也要匹配而不是不要匹配啊?感觉完全没有规则了,不是按逗号空格分割?你还是把你的数据列出来看吧,0)你也算十六进制?
OneOnce 2017-09-11
  • 打赏
  • 举报
回复
引用 4 楼 chb345536638 的回复:
(?i)已经不区分大小写了,你有什么数据没通过?
你那个工具好像挺牛的~
OneOnce 2017-09-11
  • 打赏
  • 举报
回复
引用 4 楼 chb345536638 的回复:
(?i)已经不区分大小写了,你有什么数据没通过?
非常感谢, 字符串: 0) 不能匹配
  • 打赏
  • 举报
回复
(?i)已经不区分大小写了,你有什么数据没通过?
  • 打赏
  • 举报
回复
引用 2 楼 OneOnce 的回复:
[quote=引用 1 楼 chb345536638 的回复:]

(?i)^((0x)?([a-f\d])+,\s)*(0x)?([a-f\d])+$


其实你也可以通过“,”分割出来通过Convert.ToInt32("0x3a", 16)来转换,成功的就是,不成功的就不是呗


0x的x可能还有大小写问题~
直接转换最少要2次,因为我还要匹配是不数值型(包含十六进制和十进制还有double)[/quote]

OneOnce 2017-09-11
  • 打赏
  • 举报
回复
引用 1 楼 chb345536638 的回复:

(?i)^((0x)?([a-f\d])+,\s)*(0x)?([a-f\d])+$
其实你也可以通过“,”分割出来通过Convert.ToInt32("0x3a", 16)来转换,成功的就是,不成功的就不是呗
0x的x可能还有大小写问题~ 直接转换最少要2次,因为我还要匹配是不数值型(包含十六进制和十进制还有double)
  • 打赏
  • 举报
回复

(?i)^((0x)?([a-f\d])+,\s)*(0x)?([a-f\d])+$
其实你也可以通过“,”分割出来通过Convert.ToInt32("0x3a", 16)来转换,成功的就是,不成功的就不是呗

110,537

社区成员

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

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

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