在查看正则表达式时,我找到了以下示例:
>>> import re
>>> p = re.compile('.*[.].*$')
>>> m = p.search('foo.bar')
>>> print(m.group())
foo.bar
我不理解使用foo.bar
,abc.xyz
,my_files.txt
等扩展程序识别简单文件名的过程。我认为这段代码的工作原理如下:
.
与任何角色匹配。*
会导致匹配0次或更多次重复。foo.bar
)与.*
匹配。< / LI>
[.]
尝试找到字符.
,但没有字符。.*$
没有做任何事情。我想知道这段代码是如何运作的。
答案 0 :(得分:2)
表达式*
会使正则表达式引擎尽可能地匹配,而不是所有内容。
通常情况下,正则表达式引擎会像您描述的那样通过行尾匹配,但后退回到较早的位置,直到它可以继续进行其余的匹配。
也许可以把它想象成一个迷宫解算器,系统地探测迷宫的每个可能的交汇点,直到找到一个出口,或者耗尽搜索空间。