关于python中re使用的分组疑惑
本帖最后由 紫夜之恋 于 2020-8-21 11:44 编辑在看小甲鱼老师分享的正则表达式遇到一个分组的问题,如果按照老师的操作是没有问题的,但是如果在老师前面的例子上加个分组去测试就看不懂了。
第一个不加括号的,可以匹配到3 15 3
第二个加括号的,为什么15只匹配到了5,请哪位知道的大大解释一下
废话不多说,直接上图 你的分组括号加的位置不对,应该把+也括进去
p=re.compile('([\d]+)')
print(p.findall ('3只小甲鱼,15条腿,多出的3条在哪里?')) 本帖最后由 紫夜之恋 于 2020-8-21 12:02 编辑
sunrise085 发表于 2020-8-21 11:53
你的分组括号加的位置不对,应该把+也括进去
是有这种写法的,我是在问这种写法应该如何理解
紫夜之恋 发表于 2020-8-21 12:01
是有这种写法的,我是在问这种写法应该如何理解
哦哦,这样啊。那给你解释一下
p=re.compile('([\d])+')
#这钟写法,匹配这个组的一次或多次,然后返回该分组,分组内容是一个数字
p=re.compile('([\d]+)')
#这种写法,匹配这个分组一次,分组内容是一个或多个数字
写+号看不太好理解,你若写成2就好理解了
p=re.compile('([\d]){2}')
print(p.findall ('3只小甲鱼,15条腿,多出的3条在哪里?'))
这个是匹配两个该分组,分组内容是一个数字。这样匹配到的就只有一个了
结果是:
['5']
因为3不符合条件,匹配条件是需要有两个数字,3那里只有一个。
匹配的时候先看到数字3,然后向后没有第二个数字了,不符合;看到1,在向后看到5,符合了,返回5;后面的3也是如此 p=re.compile('([\d])+')
#这钟写法,匹配这个组的一次或多次,然后返回该分组,分组内容是一个数字
p=re.compile('([\d]+)')
#这种写法,匹配这个分组一次,分组内容是一个或多个数字 本帖最后由 紫夜之恋 于 2020-8-21 14:39 编辑
sunrise085 发表于 2020-8-21 12:18
哦哦,这样啊。那给你解释一下
对的,和我理解的一样,我是想问,为什么就返回了5 而不是15
或者再简单的问,为什么不加括号可以直接获取15, 而加了括号获取的只是5 紫夜之恋 发表于 2020-8-21 14:34
对的,和我理解的一样,我是想问,为什么就返回了5 而不是15
或者再简单的问,为什么不加括号可以直 ...
因为你加小括号了啊,小括号是分组,只捕获分组内的内容,而组内只有一个数字 sunrise085 发表于 2020-8-21 16:21
因为你加小括号了啊,小括号是分组,只捕获分组内的内容,而组内只有一个数字
如果这么理解的话,15是2个数字挨着的,为什么捕获5, 1就没有被捕获
我感觉就是这个点我没理解 紫夜之恋 发表于 2020-8-21 17:42
如果这么理解的话,15是2个数字挨着的,为什么捕获5, 1就没有被捕获
我感觉就是这个点我没理解
四楼的时候不是和你讲过了么?
读到1的时候,还不符合条件,因为只识别到一个数字,读到5的时候才识别到两个连续数字,所以5才是符合条件的,1不符合条件 sunrise085 发表于 2020-8-21 18:28
四楼的时候不是和你讲过了么?
读到1的时候,还不符合条件,因为只识别到一个数字,读到5的时候才识别到 ...
好吧 如果是这样的话 只能说我没理解
我以为15符合条件所以就应该返回15
原来是这么理解的
非常感谢你的解答 {:10_279:}{:10_279:}{:10_279:}
页:
[1]