title: What is the purpose of .* in a Python lookahead regex?
body: <p>I am learning about regular expressions, and I found an interesting and helpful page on using them for password input validation <a href="https://stackoverflow.com/questions/19605150/regex-for-password-must-be-contain-at-least-eight-characters-at-least-one-numbe">here</a>.  The question I have is about the <code>.*</code> in the following expression:</p>
  
  <p><code>"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"
  </code></p>
  
  <p>I understand that <code>.*</code> is a wildcard character representing any amount of text (or no text) but I'm having trouble wrapping my head around its purpose in these lookahead expressions.  Why are these necessary in order to make these lookaheads function as needed?</p>