2017-09-10 11 views
2

私はjsonファイルを介してユーザー設定を受け入れるツールを書いています。この設定の一つは、Python正規表現とオプションの正規表現フラグです。現在、正規表現フラグの設定は整数の配列であり、すべてがビット単位または(|)で実行され、再コンパイル方式に送られます。jsonで指定されたPythonの正規表現フラグの妥当性確認

私の質問は、これらの整数が有効な再フラグであることを確認するためにどのように検証できますか?

EDIT:または私の問題の潜在的に別の解決策...ユーザーがJSONで実際のreフラグを指定することは可能ですか?私は、[re.DEBUG、re.IGNORECASE] etc etcそして、どういうわけか私のpythonスクリプトでJSONファイルからそれらを翻訳しますか?

+0

ですか? –

+0

@WiktorStribiżew理想的には、両方ともサポートされるようにしています – Ogen

+1

[2,4,8,16,32,64,128,256]の 'ifオプションを使ってこれらを検証することができます。 're.ASCII'(256)はPython 3の' re'にのみ存在することに注意してください。 –

答えて

1

可能なすべてのフラグの辞書を定義できます(実際にはほとんどありません。re6.2.2. Module Contentsを参照)。対応するキーで値を取得します。

Python demo

import re 
re_flags = { 're.A' : re.A, 
    're.ASCII' : re.ASCII, 
    're.DEBUG' : re.DEBUG, 
    're.I' : re.I, 
    're.IGNORECASE' : re.IGNORECASE, 
    're.L' : re.L, 
    're.LOCALE' : re.LOCALE, 
    're.M' : re.M, 
    're.MULTILINE' : re.MULTILINE, 
    're.S' : re.S, 
    're.DOTALL' : re.DOTALL, 
    're.X' : re.X, 
    're.VERBOSE' : re.VERBOSE } 
flg = 're.I'      # User input 
if flg in re_flags:    # If the dict contains the key 
    print(re_flags[flg])   # Print the value (re.I = 2) 

あなたはまだ代わりに数字と一緒に行きたい場合は:それは、Python 2または3のために

import re 
print(re.A)   # 256 
print(re.ASCII)  # 256 
print(re.DEBUG)  # 128 
print(re.I)   # 2 
print(re.IGNORECASE) # 2 
print(re.L)   # 4 
print(re.LOCALE)  # 4 
print(re.M)   # 8 
print(re.MULTILINE) # 8 
print(re.S)   # 16 
print(re.DOTALL)  # 16 
print(re.X)   # 64 
print(re.VERBOSE)  # 64 
+1

ええ、私は私のスクリプトがPython 2または3で実行されているかどうかわからないので、生の数字に割り当てたので、私はreモジュールを使用しようとすると、 Python 2などで – Ogen