【发布时间】:2016-06-29 12:00:04
【问题描述】:
我有以下正则表达式:
passw = re.compile(r'^(?=.*\d)(?=.*[A-Z])(?=.*[\$|\?\!])[A-Za-z\d$!&]{8}$')
我可以解释为长度为 8 的字符串,它必须至少包含一个数字、一个大字母和一个字符($?!)。而且也只包含数字、字母和$?!。
?= - 此符号称为前瞻断言:例如,Isaac (?=Asimov) 将匹配 'Isaac ',仅当它后跟 'Asimov'。
但是我们如何解释.* 符号呢?在正则表达式中是什么意思?
在这种情况下我们可以避免吗?
【问题讨论】:
-
.*不是一个标志。它是.字符(意思是“任何字符”)和*字符(意思是“任意数量(包括零)”)。所以.*的意思是“任意数量的任意字符”。 -
.*匹配零次到无限次之间的任何字符(换行符除外)。 -
您是否有理由尝试在单个正则表达式中进行所有这些检查?您是否考虑过进行两个或三个单独的检查,每个检查都比一个长的正则表达式更易于阅读和维护?