积极前瞻断言和。*签到python

时间:2016-06-29 12:00:04

标签: python regex lookahead

我有以下正则表达式:

passw = re.compile(r'^(?=.*\d)(?=.*[A-Z])(?=.*[\$|\?\!])[A-Za-z\d$!&]{8}$')

我可以将其解释为长度为8的字符串,其中必须包含至少一个数字,一个大字母和一个字符($?!)。而且还只包括数字,字母和$?!。

?= - 此符号称为前瞻断言:例如,Isaac (?=Asimov)只有匹配'Isaac '后才会匹配“阿西莫夫”。

但我们如何解释.*符号?正则表达式意味着什么? 在这种情况下我们可以避免它吗?

1 个答案:

答案 0 :(得分:1)

实际上.*表示任何字符出现零次或多次,并且当它在前瞻中使用特殊模式时,意味着正则表达式引擎将声明正则表达式可以匹配。当您在模式之前使用.*时,您告诉正则表达式引擎匹配我的模式,该模式前面有零个或多个字符,这意味着您要确保您的模式存在于您的字符串中(从前导到尾随)

以下是图表示例:

(?=.*\d)[a-z]+

Regular expression visualization

Debuggex Demo