2017-06-15 49 views
0

私が書いているプログラムでは、16進数の特定の数値が所定の範囲内にあるかどうかを調べる必要があります。 52から71正規表現の範囲16進数で

私は与えられたかどうかを確認する必要があります。

私は、次の範囲を受け取ると言うことができます:

は、私はそれがすべて私がで立ち往生していますつの問題のを除いて、考え出しました数字はその範囲内にあります。例えば、6e

これをサポートする正規表現を書くにはどうすればよいですか?すべての数値は、その中に発生させることができるので、50-7fを検出する正規表現式を書く

が容易である - >[5-7] [0-9A-FA-F]

問題は、それが72 、6eは、53、71を除く外が、51を拒絶しなければならないので、範囲を簡素化することができないということです範囲50-51を排除する巧妙な方法はあります72- 7F前に述べた表現から

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

は、私が働いています、非常に多くところで をありがとうPython。

+2

ここでは正規表現が間違っている可能性が高いですが、文字列を数値に変換して比較するのはなぜですか? –

+0

試してみることができます:https://stackoverflow.com/questions/13366323/using-comparison-operators-for-hex-values – Esteban

+0

これは、より大きなプログラムの一部です。これが最も効率的な方法です。これが最後です私が解決する必要がある障害 –

答えて

0

1つのアプローチは、興味のある範囲を、上記パーティションと一致する正規表現からの交替を分割することです。

サンプル・レンジ([52から71])アドレッシング:

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

あなたの正規表現エンジンの大文字と小文字を区別しないマッチングを使用します。それが利用できない場合は、大文字と小文字の区別のついた範囲を文字クラスに追加します。

0

文字列を変換するのは簡単です(文字列として値を受け取ったと仮定して正規表現を使用しているため)。通常のint演算子で評価します。

このジョブにregexを使用すると、パターンに一致し、値の概念を持たないため、すべてがより複雑になります。あなたはそれを行うことを主張した場合、これは、仕事をする必要があります(ただし、すべてのあなたが除外の範囲は、それがさらに複雑にするために起こっていることを、忘れないでください!):

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

あなたはテストケースと説明here

でそれを見ることができます
関連する問題