为什么^ \ d + $匹配一个完全数字的字符串?

时间:2017-08-05 02:05:25

标签: python regex python-3.x

以下正则表达式

moo = re.compile(r'^\d+$')

将搜索一个以数字字符开头和结尾的字符串。示例可以是1123444332123321321等。

但正则表达式与12321xyz12312不匹配。这个字符串也以数字开头和结尾,这就是我的正则表达式需要匹配一个字符串!那为什么我的正则表达式也不匹配这个字符串呢?

3 个答案:

答案 0 :(得分:4)

我认为你误解了开始和结束匹配器是如何工作的。

^\d+$不会简单地匹配以数字结尾并以数字开头的字符串。它说的是:

  • 转到字符串的开头(^
  • 匹配一个号码(\d
  • 尽可能多地匹配这些数字(+
  • 现在继续尝试匹配这些,直到字符串结尾($

12321xyz12312不匹配,因为它匹配12321后,会尝试匹配字符串的结尾。但它还没有结束,所以字符串不匹配!

这是一个正如你想要的正则表达式:

^\d(.*\d)?$

该表达式将匹配以下内容:

YES  0 
 NO  x0
 NO  0x
YES  00
YES  000
YES  0x0
YES  00x00
YES  000xxx000

答案 1 :(得分:1)

"^\d+$"表示“开始"\d+"和结束"^"之间的一个或多个小数位"$"。” xyz不是十进制数字。

答案 2 :(得分:1)

我认为你误解了正则表达式。它匹配"字符串的开头" ([0-9])紧接着"一个或多个0-9个字符" (0|1|2|3|4|5|6|7|8|9 - +$^ ... $相同,...表示"重复一次或多次")紧随其后by"字符串结束" ({{1}})。

也就是说,{{1}}表示"只匹配{{1}}所属的字符串" (而不是"匹配包含它的字符串")。