以下所有3个陈述仅允许使用字母,数字,下划线和连字符通过。使用re.sub
,re.match
和& re.search
以下?即,是否有可能为str
的值,其中下面的`if语句的执行路径可能与其中任何一个不同?
str = 'some-random-string *&- '
if re.sub(r'[^a-zA-Z0-9_-]', '', str) == str:
#do stuff
if re.match(r'[a-zA-Z0-9_-]+$', str):
#do stuff
if re.search(r'^[a-zA-Z0-9_-]+$', str):
#do stuff
答案 0 :(得分:1)
使用re.sub
,您会收到一个新字符串,并检查它是否与检测某些内容是否被删除的内容不相同 - 这并不完全符合要求。
使用re.search
和^
来锚定匹配的开头与使用re.match
相同。
使用re.match
更加明确您正在尝试实现的内容, 以匹配该模式,否则它无效 - 它也可以提前快捷...
简而言之 - 坚持re.match
为您的目的。