为什么'。* [。]。* $'与filename.extension匹配?

时间:2018-04-05 16:17:57

标签: python regex

在查看正则表达式时,我找到了以下示例:

>>> import re
>>> p = re.compile('.*[.].*$')
>>> m = p.search('foo.bar')
>>> print(m.group())
foo.bar

我不理解使用foo.barabc.xyzmy_files.txt等扩展程序识别简单文件名的过程。我认为这段代码的工作原理如下:

  1. .与任何角色匹配。
  2. *会导致匹配0次或更多次重复。
  3. 通过 1。 2。整个字符串(foo.bar)与.* 匹配。< / LI>
  4. [.]尝试找到字符.,但没有字符
  5. .*$没有做任何事情。
  6. 未找到匹配项。
  7. 我想知道这段代码是如何运作的。

1 个答案:

答案 0 :(得分:2)

表达式*会使正则表达式引擎尽可能地匹配而不是所有内容。

通常情况下,正则表达式引擎会像您描述的那样通过行尾匹配,但后退回到较早的位置,直到它可以继续进行其余的匹配。

也许可以把它想象成一个迷宫解算器,系统地探测迷宫的每个可能的交汇点,直到找到一个出口,或者耗尽搜索空间。