具有异常值的正则表达式十六进制数

时间:2017-06-15 07:30:53

标签: python regex hex range

在我写的程序中,我需要检查十六进制中的某个数字是否在给定范围内。

我把这一切都想通了,除了我遇到的一个问题:

假设我收到以下范围: 52-71

我需要检查给定数字是否在该范围内,例如: 6e

如何编写支持该表达式的正则表达式?

编写一个检测 50-7f 的正则​​表达式很容易,因为每个数字都可以在其中生成 - >的 [5-7] [0-9A-FA-F]

问题是范围不能简化,因为它必须除 6e,53,71 外,但拒绝 51,72 是否有一种聪明的方法可以从前面提到的表达式中排除 50-51 72-7f 的范围:

[5-7] [0-9A-FA-F]

非常感谢, 顺便说一句,我正在使用python。

2 个答案:

答案 0 :(得分:1)

将字符串(因为你正在使用正则表达式,我假设你将字符串的值接收)转换为int并使用普通的int运算符进行求值会更简单。

使用正则表达式完成这项工作只会使一切变得更复杂,因为它们匹配模式并且没有价值概念。如果你坚持这样做,这应该做的工作(但请记住,你排除的每个范围都会使它变得更加复杂!):

5[2-9a-fA-F]|6[0-9a-fA-F]|7[0-1]

您可以通过测试用例和解释here

查看

答案 1 :(得分:0)

一种方法是划分感兴趣的范围,从匹配所述分区的regexen构建交替。

解决您的样本范围( [52-71] ):

(5[2-9a-f]|6[0-9a-f]|7[01])

使用正则表达式引擎的不区分大小写的匹配。如果它不可用,请将repsective大写范围添加到字符类中。