请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 8372|回复: 3

正则表达式疑问

[复制链接]

2

主题

0

好友

30

积分

新手上路

Rank: 1

发表于 2019-3-12 21:20:28 |显示全部楼层
import re
text='Let us go go go !'
m=re.findall('(go\s*)+',text)
if m:
    print m
else:
    print 'not match'

>>>
['go ']

为什么结果不是go go go  .+使用的不是贪婪准则吗

回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2019-3-12 21:32:38 |显示全部楼层
匹配到的是 'go go go '
但你还加了括号,那么就只捕获分组,你的分组是 go\s*,也就是 'go '
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

60

积分

注册会员

Rank: 2

发表于 2019-3-13 13:11:26 |显示全部楼层
本帖最后由 stormsha 于 2019-3-13 13:13 编辑

import re

# 1
"""
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
.+  加上 + 匹配一个或多个,贪婪匹配
.*  加上 * 匹配零个或多个,贪婪匹配

.+?  .*?  加上 ? 非贪婪匹配
"""
print(1, '---------------------------------------')
# 实战检测一下更好理解
text = 'Let us go go go !'
m1 = re.findall('us (.+) !', text)
m2 = re.findall('(go.+) ', text)
m3 = re.findall('(go.*) ', text)
print(m1)
print(m2)
print(m3)

# 2
"""
# \d    匹配任意数字,等价于 [0-9].
\d+     
\d+?    这里 + 、?、+? 和上边意义是一样的,只不过匹配的目标是 \d (数字)
"""

# 实战检测一下更好理解
print(2, '---------------------------------------')
text = 'Let us 3 4  5 52 go go go !'
m1 = re.findall('(\d+?)', text)
m2 = re.findall('(\d+)', text)
m3 = re.findall('(5\d*?)', text)
print(m1)
print(m2)
print(m3)


# 3
"""
\s 匹配任意空白字符,等价于 [\t\n\r\f].

\s*
\s*?

从上边可以发现,  *、*?和上边意义也一样,只是这里\s匹配空字符

"""
print(3, '---------------------------------------')
text = 'Let us go go go !'
m1 = re.findall(r'go\s+', text)
m2 = re.findall(r'go\s+?', text)
m3 = re.findall(r'go\s*?', text)

m4 = re.findall(r'(go\s*)', text)
m5 = re.findall(r'(go\s*)+', text)

m6 = re.findall(r'(go\s*?)', text)
m7 = re.findall(r'(go\s*?)+', text)

m8 = re.findall(r'(go go go\s*)', text)

print(m1)
print(m2)
print(m3)
print(m4)
print(m5)
print(m6)
print(m7)
print(m8)

"""
看到了这个问题,自己写了一下加深一下对 .  \d  \s  的理解
"""
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2019-3-13 15:03:29 |显示全部楼层
stormsha 发表于 2019-3-13 13:11
import re

# 1

很好的习惯
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-3-29 15:18 , Processed in 0.016839 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部