【发布时间】:2022-12-24 04:36:32
【问题描述】:
据我所知,* 表示在正则表达式中匹配次数超过 0 次。 {n,m} 表示等于或大于 n 次出现且等于或小于 m 次出现。
但是下面的代码有些奇怪。 我想做的是找到数字。
0 >>> import re
1 >>>
2 >>> re.search(r'[a-z]{4,6}[0-9]{2,6}', 'bird99')
3 <re.Match object; span=(0, 6), match='bird99'>
4 >>> re.search(r'[0-9]{2,6}', 'bird99')
5 <re.Match object; span=(4, 6), match='99'>
6 >>> re.search(r'[0-9]{0,6}', 'bird99')
7 <re.Match object; span=(0, 0), match=''>
8 >>> re.search(r'[0-9]*', 'bird99')
9 <re.Match object; span=(0, 0), match=''>
我希望在结果行号 7 和 9 上匹配 99,但它没有匹配。 任何人都可以解释这个结果吗?
提前致谢。
【问题讨论】:
-
你想匹配0或更多数字,因此这与字符串开头的空字符串完美匹配。
-
请注意,
span(0,0)清楚地表明匹配项位于位置零且长度为零。 -
这意味着 * 可以匹配每个字符串,因为任何字符串都包含 0 次出现的任何模式,对吧?