在我正在编写的程序中,我需要检查十六进制中的某个数字是否在给定的范围内。
我把这一切都弄明白了,除了一个我一直坚持的问题:
假设我收到以下范围:52-71
我需要检查给定的号码是否在这个范围内,例如:6e
我如何编写支持这个功能的regex表达式?
编写一个regex表达式来检测50-7f很容易,因为每个数字都可以在其中生成-> 5-7。
问题是范围不能简化,因为它必须除6e、53、71之外,但拒绝51,72 -有一种聪明的方法可以从前面提到的表达式中排除范围50-51,72-7f:
5-7
非常感谢,顺便说一句,我正在和python一起工作。
发布于 2017-06-15 07:44:19
一种方法是划分感兴趣的范围,从与所述分区匹配的regexen构建交互。
寻址示例范围( 52-71 ):
(5[2-9a-f]|6[0-9a-f]|7[01])
使用正则表达式引擎不区分大小写的匹配。如果不可用,请将修改大写范围添加到字符类中。
发布于 2017-06-15 07:48:25
将字符串(因为您正在使用regex )转换为int并使用普通int运算符进行计算会更简单。
对此作业使用regex只会使一切变得更加复杂,因为它们匹配模式,没有价值概念。如果您坚持这样做,这应该可以完成任务(但是请记住,您排除的每一个范围都会使它变得更加复杂!):
5[2-9a-fA-F]|6[0-9a-fA-F]|7[0-1]
您可以在测试用例和解释这里中看到它。
https://stackoverflow.com/questions/44561342
复制相似问题