【问题标题】:Regex range of hex number with excusions带有偏移的十六进制数的正则表达式范围
【发布时间】:2017-11-17 14:00:52
【问题描述】:

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

我都明白了,除了我遇到的一个问题:

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

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

我怎样才能编写一个支持它的正则表达式?

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

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

[5-7][0-9a-fA-F]

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

【问题讨论】:

  • Regex 很可能是这里的错误工具,是什么让您无法将字符串转换为数字并与它们进行比较?
  • 它是更大程序的一部分,这是最有效的方法,也是我需要解决的最后一个障碍

标签: python regex hex range


【解决方案1】:

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

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

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

你可以看到它有测试用例和解释here

【讨论】:

    【解决方案2】:

    一种方法是对感兴趣的范围进行分区,从匹配所述分区的正则表达式构建一个替代。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-25
      • 2012-07-12
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      相关资源
      最近更新 更多