我需要一个正则表达式来测试字符串是否在特定的值调色板中,例如字符串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 的编译正则表达式快大约六倍)
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)
除非您遵循更好的建议并为此目的使用哈希集。