https://www.freecodecamp.com/challenges/find-numbers-with-regular-expressions
我在FCC做了一课,他们提到数字选择器\ d找到一个数字并在选择器前面添加+(\ d +)允许它搜索多个数字。
我对它进行了一些实验,并注意到在搜索每个数字而不是+的表达式之后的g。我尝试在表达式后使用\ d +而没有g,它只匹配字符串中的第一个数字。
基本上,无论我使用\ d还是\ d +,只要我在表达式后面有g,它就会找到所有的数字。所以我的问题是,两者有什么区别?
from __future__ import unicode_literals
from django.db import models
class BookManager(models.Manager):
def title_count(self, keyword):
return self.filter(title__icontains=keyword).count()
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher, on_delete=models.PROTECT)
publication_date = models.DateField()
num_pages = models.IntegerField(blank=True, null=True)
objects = BookManager()
def __str__(self):
return self.title
答案 0 :(得分:6)
最后的g
表示global
,即。您想要搜索所有事件。没有它,你只会得到第一场比赛。
\d
意味着一个数字。您可以添加量词来指定是否要匹配以下所有内容,或之后的一定数量的数字。
\d
表示单个数字
\d+
表示所有连续数字
所以,让我们说我们有一个这样的字符串:
123 456
7890123
/\d/g
将匹配[1,2,3,4,5,6,7,8,9,0,1,2,3]
/\d/
将匹配1
/\d+/
将匹配123
/\d+/g
将匹配[123,456,7890123]
您还可以使用/\d{1,3}/g
表示您希望匹配序列中1到3位数的所有匹配项。
另一个常见的量词是星号,表示0或更多。例如,/1\d*/g
将匹配以1开头的所有数字序列,并且后面有0位或更多位数。
答案 1 :(得分:3)
计算\d
的出现次数将在字符串中找到位数。
计算\d+
的出现次数将在字符串中找到整数的数量。
即
123 456 789
有9个位,但有3个整数。
答案 2 :(得分:1)
\d
表示从0到9的任何数字,+
表示"一次或多次"。
只要您的数字是单个数字就没有区别,但在字符串中#34;我有23头奶牛"并且\d
将匹配2,而\d+
将匹配23.