python语言之正则
Posted sowhat1943
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python语言之正则相关的知识,希望对你有一定的参考价值。
(一)正则表达式的构成
正则表达式由两种元素组成:
字面值
- 普通字符和
- 需要转义的字符(,^,$,.,|,?,*,+,(),[],{})
元字符(特殊意思)
.:除 外的所有字符
d:数字,等同于[0-9]
D:匹配所有非数字 [ ^ 0-9]
s:空白字符, fv
S:非空白字符[ ^ fv]
w:字母数字字符[A-Za-z0-9_]
W:字母数字字符[ ^A-Za-z0-9_]
|:yes|no
+:一次或者多次
?:一次或者0次
*:0次或者多次
{3,5}:3次到5次
{m}:m次
{m,}:最少m次
{,n}:最多n次
贪婪与非贪婪
非贪婪(两次后加?)
.*?
贪婪(默认)
边界匹配
^:行首
$:行尾
:单词边界
B:非单词边界
A:输入开头
:输入结尾
?
?
(二)Python正则模块之RegexObject
模块:import re
RegexObject:编译后的正则表达式对象(编译为字节码并缓存re.compile),有利于重用
findAll方法
import re
text = "Tom is 8 years old. Mike is 23 years old"
pattern = re.compile('d+')
pattern.findall(text)
['8', '23']
>>> pattern = re.compile('[A-Z]w+')
>>> pattern.findall(text)
['Tom', 'Mike']
----------------------------------------------------
s = '\author:Kobe'
pattern = re.compile('\author')
pattern.findall(s)
[]#p匹配不到
pattern = re.compile('\\author')
pattern.findall(s)
['\author']
pattern = re.compile(r'\author')
pattern.findall(s)
['\author']
match(str,[,pos[,endpos]])方法,返回MatchObject:从开始的位置匹配,或指定从某个位置匹配,到哪个位置结束
pattren = re.compile(r'<html>')
text = '<html><head></head><body></body></html>'
pattren.match(text)
<_sre.SRE_Match object; span=(0, 6), match='<html>'>
text1 = ' <html><head></head><body></body></html>'
pattren.match(text1)
pattren.match(text1,1)
<_sre.SRE_Match object; span=(1, 7), match='<html>'>
search(str,[,pos[,endpos]])方法任意位置搜索,返回MatchObject
text = "Tom is 8 years old. Mike is 23 years old"
p1 = re.compile('d+')
p2 = re.compile('[A-Z]w+')
p1.match(text)
p2.match(text)
<_sre.SRE_Match object; span=(0, 3), match='Tom'>
p1.search(text)
<_sre.SRE_Match object; span=(7, 8), match='8'>
p2.search(text)
<_sre.SRE_Match object; span=(0, 3), match='Tom'>
finditer方法,类似于findAll,查找所有匹配项,返回一个可迭代对象
it = p1.finditer(text)
for m in it:
print(m)
<_sre.SRE_Match object; span=(7, 8), match='8'>
<_sre.SRE_Match object; span=(28, 30), match='23'>
(三)Python正则模块之MatchObject
text
'Tom is 8 years old. Mike is 23 years old'
pattern = re.compile(r'(d+).*?(d+)')
m = pattern.search(text)
m
<_sre.SRE_Match object; span=(7, 30), match='8 years old. Mike is 23'>
m.group()
'8 years old. Mike is 23'
m.group(0)
'8 years old. Mike is 23'
#查看匹配的第一个分组
m.group(1)
'8'
#查看匹配的第二个分组
m.group(2)
'23'
#查看匹配的第一个分组的起始下标
m.start(1)
7
#查看匹配的第一个分组的结束下标
m.end(1)
8
#查看匹配的第一个分组的开始下标和结束下标
m.span(1)
(7, 8)
#查看匹配的第二个分组的起始下标
m.start(2)
28
#查看匹配的第二个分组的结束下标
m.end(2)
30
m.groups()
('8', '23')
type(m.groups())
<class 'tuple'>
-----------------------------------------------
text = 'i am a good teacher'
pattern = re.compile('(w+) (w+)')
pattern.findall(text)
[('i', 'am'), ('a', 'good')]
iter = pattern.finditer(text)
for m in iter:
print(m.group())
i am
a good
以上是关于python语言之正则的主要内容,如果未能解决你的问题,请参考以下文章