1

文字列が特定の値のパレットにあるかどうかをテストするための正規表現が必要です。たとえば、文字列は、、、、、、、dirまたは別の例はltr、、のみです。rtllrorloboolfalsetrue

どのような正規表現を使用して、限られた値のセットのdirような文字列をテストできますか?bool

4

3 に答える 3

5

正規表現よりも優れているのは、リストまたはセットを使用することです。

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:
    ...
于 2012-09-20T14:28:16.387 に答える
1

'^(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: ...。エスケープされていないバージョンの優れた点は、正規表現の柔軟性の少なくとも一部がまだ残っていることです。

于 2012-09-20T14:28:31.180 に答える
1

dir がこれらの文字列のいずれかと等しいかどうかを確認するには、次を使用できます。

re.match("^(ltr|rtl|lro|rlo)$", dir)

ブール用の別のもの:

re.match("^(false|true)$", bool)

より良いアドバイスに従い、その目的のためにハッシュセットを使用しない限り。

于 2012-09-20T14:28:54.400 に答える