文字列が特定の値のパレットにあるかどうかをテストするための正規表現が必要です。たとえば、文字列は、、、、、、、dir
または別の例はltr
、、のみです。rtl
lro
rlo
bool
false
true
どのような正規表現を使用して、限られた値のセットのdir
ような文字列をテストできますか?bool
文字列が特定の値のパレットにあるかどうかをテストするための正規表現が必要です。たとえば、文字列は、、、、、、、dir
または別の例はltr
、、のみです。rtl
lro
rlo
bool
false
true
どのような正規表現を使用して、限られた値のセットのdir
ような文字列をテストできますか?bool
正規表現よりも優れているのは、リストまたはセットを使用することです。
dir_choice = set(('ltr', 'rtl', 'lro', 'rlo'))
if dir in dir_choice:
...
(dir_choice
以前に定義されている場合、チェックは@IvanKoblikのコンパイル済み正規表現よりも約6倍高速です)
bool_choice = set(('true', 'false'))
if bool in bool_choice:
...
'^(ltr|rtl|lro|rlo)$'
とのようなもの'^(true|false)$'
ですか?
これは簡単に自動化することもできます:
def make_re(args):
args = (re.escape(arg) for arg in args) #if you want to escape special characters
return re.compile('^({0})$'.format('|'.join(args)) )
boolre = make_re(('true','false'))
ただし、行をそのままにしておくと、args = (re.escape(arg) ...)
を使用して得られる以上のことは何も得られませんif arg in myset: ...
。エスケープされていないバージョンの優れた点は、正規表現の柔軟性の少なくとも一部がまだ残っていることです。
dir がこれらの文字列のいずれかと等しいかどうかを確認するには、次を使用できます。
re.match("^(ltr|rtl|lro|rlo)$", dir)
ブール用の別のもの:
re.match("^(false|true)$", bool)
より良いアドバイスに従い、その目的のためにハッシュセットを使用しない限り。