1

我需要一个正则表达式来测试字符串是否在特定的值调色板中,例如字符串dir只能是ltr, rtl, lro, rlo,或者另一个例子bool只能是false, true

我可以使用什么正则表达式来测试一个字符串,比如dirbool组有限的值?

4

3 回答 3

5

比正则表达式更好,使用列表或集合。

dir_choice = set(('ltr', 'rtl', 'lro', 'rlo'))

if dir in dir_choice:
    ...

(如果你dir_choice之前定义过,检查比@IvanKoblik 的编译正则表达式快大约六倍)

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 回答