match 、 search、findall的区别
match从字符串的开头开始匹配,如果开头没有匹配到,search是从字符串任意位置开始匹配。
上面两个都是匹配到一个就停止匹配。findall是返回所有能匹配上的字符串列表
re.match
re str=result1 = re.match(,str) result1.group()
1
2
3
|
python re_test.py
<_sre.SRE_Match object at 0x10584fa58>
123
|
开头匹配不到则返回None
re str=result1 = re.match(,str) result1
1
2
|
python re_test.py
None
|
re.search
匹配到一次就停止
re str=result2 = re.search(, str) result2 result2.group()
1
2
3
|
python re_test.py
<_sre.SRE_Match object at 0x108475a58>
123
|
re.findall
findall返回的是列表
re str=result3 = re.findall(,str) result3
1
2
|
python re_test.py
[
'123'
,
'123123'
]
|
匹配不到则返回空列表
re str=result3 = re.findall(,str) result3
1
2
|
python re_test.py
[]
|
re.compile
可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。下面是一个正则表达式对象的一个例子:
text = regx = re.compile() regx.findall(text)
python re_test.py ['JGood', 'cool']
group和groups的区别
先看一个示例
re result = re.search(,) result.group() result.groups()
python re_test.py 123asdf234 ('123', '234')
从上面的示例可以看出group会返回到正则表达式中所有的符合规则的内容,而groups只会返回分组(即括号括起来的为一组)中的内容。
正则表达式常用格式:
字符:
\d:表示数字
\w:字母、数字、下划线、中横线
\t:制表符
. :除了回车以外的所有字符
次数:
*:匹配前面的字符0次或者多次 相当于>=0
+:匹配前面的字符1次或者多次 相当于>=1
?:匹配前面的字符0次或者1次
{m}:匹配前面的字符m次
{m,n}:匹配前面的字符至少m次,至多n次
正则表达式匹配IP地址
最简单的方法:
ip= = re.findall(,ip)
1
2
|
python re_test.py
[
'192.168.1.200'
]
|
改进后的方法:
ip=result=re.findall('(?:\d{1,3}\.){3}\d{1,3}',ip) result
思路:第一种方法中,"[0-9]{1,3}\."出现了三次,所以我们把这一串字符当做一个整体匹配3次即可
(?:pattern) :表示非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式
本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1839630,如需转载请自行联系原作者