正则表达式

来源:互联网 发布:网络推广的收费标准 编辑:程序博客网 时间:2024/05/23 13:53

正则表达式读书笔记:
1.元字符

import res=r'abc're.findall(s,'aaaaaaaaaaaaa')res=r"top"st="top tip tqp ywp tep"re.findall(res,st)res=r"t[io]p"re.findall(res,st)res=r"t[^io]p"re.findall(res,st)

1.findall方法
findall()总返回一个列表。如果findall()没有找到匹配的部分,会返回空列表。
如果成功找到匹配的部分,则返回所有匹配部分的列表(按从左到右出现的顺序排列)
[…]匹配字符组里出现的任意一个字符
[.x-y.]匹配从字符x到y中出现的任何一个字符
[^…]取反,不匹配此字符集中出现的任何一个字符
^匹配字符串
r=r”^hello”
s=”hello world,hello boy”
re.findall(r,s)
[‘hello’]
s=”world,hello boy”
re.findall(r,s)
r=r”boy$”
re.findall(r,s)
[‘boy’]”\^abc”
re.findall(r,’^abc ^abc ^abc’)

r=r”x[0-9]x”
re.findall(r,’x1x x2x x9x’)
r=r”x[a-zA-Z0-9]x”
r=r”\d”
re.findall(r,’1234567890’)
r=r”[0-9]”
re.findall(r,’1234567890’)
{N}匹配前面正则表达式出现的次数是N
r=r”^010-\d{8}”
re.findall(r,’010-87654321’)
*匹配前面出现的字符串出现0次或多次
r=r”ab*”
re.findall(r,’a’)
re.findall(r,’ab’)
re.findall(r,’aaaaaaaaa’)
+匹配前面出现的正则表达式一次或多次
r=r”ab+”
re.findall(r,’a’)
re.findall(r,’ab’)
re.findall(r,’abbb’)
?匹配前面出现的正则表达式零次或一次
r=r”^010-?\d{8}$”
re.findall(r,’010–12345678’)
贪婪模式与非贪婪模式:
贪婪模式:
r=r”ab+”
re.findall(r,’abbbbbbbbb’)
[‘abbbbbbbb’]
非贪婪模式:(加问号)
r=r”ab+?”
re.findall(r,’abbbbbbbbb’)
[‘ab’]
{M,N}匹配重复出现M次到N次的正则表达式
r=r”a{1,3}”
re.findall(r,’a’)
re.findall(r,’aa’)
re.findall(r,’aaa’)
\反斜杠后面可以加不同的字符以表示不同特殊意义!

re模块:
re模块将REstring 编译成对象并用它们来进行匹配
编译正则表达式:

!python

import re
p=re.compile(‘ab*’)
print p

不区分大小写:

csvt_re=re.compile(r'csvt',re.I)csvt_re.findall('CSVT')csvt_re.findall('csvt')

正则表达式的方法:
match():决定RE是否在字符串刚开始的位置匹配
search():扫描字符串找到这个RE匹配首次出现的位置
两者返回的都是对象,通过group()方法获得结果
findall()找到RE匹配的所有子串,并把它们作为一个列表返回。
finditer() 找到RE匹配的所有子串,并把它们作为一个迭代器返回
如果没有匹配成功的话,match()和search()将返回None.
如果成功的话,就返回一个’MatchObject’实例
MatchObject实例方法:
group()返回被RE匹配的字符串
start()返回匹配开始的位置
end()返回匹配结束的位置
span()返回一个元祖包含匹配开始结束的位置
帮助文档使用:
help(str.endswith)
help(re.sub)
sub()和subn()将某字符串中所有匹配的正则表达式模式的部分进行替换。
不同在于:替换后的字符串和替换次数的数字作为一个元祖返回。
rs=r’c..t’
re.sub(re,’python’,’csvt caat cvvt cccc’)
re.subn(re,’python’,’csvt caat cvvt cccc’)
字符串的分割:
ip=”1.2.3.4”
ip.spilt(‘.’)
s=”123+456-789*000”
re.split(r’[+-*]’,s)
dir(re) 查看re模块的方法
help(re) 查看re手册
compile编译标志-flags
S 使.匹配包括换行在内的所有字符
I 使匹配对大小写不敏感
M 多行匹配,
X 多行匹配

s="""hello csvtcsvt hellohello csvt hellocsvt hehe"""r=r"^csvt"re.findall(r,s,re.M)email=r"\w{3}@\w+(\.com|\.cn)"re.match(email,'zzz@csvt.com')re.match(email,'zzz@csvt.cn')

re.match(email,’zzz@csvt.org’)
| 在分组中是或的操作
re.findall(email,’zzz@csvt.com’)
优先返回分组的顺序

s=”’hhsdj dskj hello src=csvt yes jdjsds
djhsjk src=123 yes jdsa src=234 yes
hello src=python yes ksa”
”’
r1=r”hello src=(. +) yes”
re.findall(r1,s)

0 0
原创粉丝点击