我对Python还不熟悉。我不理解python中这些程序的行为。你知道吗
import re
sub="dear"
pat="[aeiou]+"
m=re.search(pat,sub)
print(m.group())
这是“ea”
import re
sub="dear"
pat="[aeiou]*"
m=re.search(pat,sub)
print(m.group())
这不会打印任何东西。你知道吗
我知道+匹配1个或多个事件,*匹配0个或多个事件。我希望它打印“ea”在这两个程序。但是没有
为什么会这样?你知道吗
Tags:
+
至少与前面的一个字符或组匹配。[aeiou]+
因此将匹配a
、e
、i
、o
或u
(元音)中的至少一个。你知道吗正则表达式将查找字符串中的任何地方,以找到它要查找的最小1个元音,并按您的期望执行(它将不懈地尝试满足条件)。你知道吗
*
但是表示至少0,这也意味着它不能匹配任何内容。也就是说,当regex引擎开始在要测试的字符串的开头查找匹配项时,它没有找到匹配项,因此0
匹配条件得到满足,这就是您获得的结果。你知道吗如果您使用了字符串
ear
,请注意,您将使用ea
作为匹配项。你知道吗使用} 确认:
[aeiou]*
,模式在开头匹配。您可以使用^{不完全是。它打印一个空字符串,你当然没有注意到,因为它是不可见的。请尝试改用以下代码:
这将打印:
为什么会有这种行为?
这是因为当您使用
*
量词-[aeiou]*
时,这个正则表达式模式还匹配每个不匹配字符串前面的空字符串,以及结尾的空字符串。因此,对于字符串dear
,它匹配如下:所有的
*'s
表示匹配项的位置。你知道吗d
与模式不匹配。所以match是前面的空字符串。你知道吗ea
与模式匹配。所以下一个匹配是ea
。你知道吗r
与模式不匹配。所以匹配是r
之前的空字符串。你知道吗r
之后的空字符串。你知道吗相关问题 更多 >
编程相关推荐