我有以下正则表达式:
passw = re.compile(r'^(?=.*\d)(?=.*[A-Z])(?=.*[\$|\?\!])[A-Za-z\d$!&]{8}$')
我可以将其解释为长度为8的字符串,其中必须包含至少一个数字,一个大字母和一个字符($?!)。而且还只包括数字,字母和$?!。
?= - 此符号称为前瞻断言:例如,Isaac (?=Asimov)
只有匹配'Isaac '
后才会匹配“阿西莫夫”。
但我们如何解释.*
符号?正则表达式意味着什么?
在这种情况下我们可以避免它吗?
答案 0 :(得分:1)
实际上.*
表示任何字符出现零次或多次,并且当它在前瞻中使用特殊模式时,意味着正则表达式引擎将声明正则表达式可以匹配。当您在模式之前使用.*
时,您告诉正则表达式引擎匹配我的模式,该模式前面有零个或多个字符,这意味着您要确保您的模式存在于您的字符串中(从前导到尾随)
以下是图表示例:
(?=.*\d)[a-z]+