正则表达式

一、re模块
二、元字符
三、re的方法

正则:对字符串的模糊匹配

一、re模块

re.findall(规则,string) #findall找到所有的匹配元素,返回列表

二、元字符

元字符:有特殊功能的字符

. :通配符,可以匹配任意除换行符(\n)的字符
^ :从开始匹配
$ :从结尾匹配

表示重复:
* :[0,∞]
+ :[1,∞]
? :[0,1]

字符集:[]
[] :表示或者的关系,特殊符号放入[],成为普通符号,除符号: - ^ \ 特殊符号:* + .
[-] :表示范围
[^] :取反的意思
[] :还具备特殊意义

无命名分组:
() :分组,将括号中的字符作为小组匹配
(?😃 :取消分组特权

命名分组:

#命名分组
s6 = re.search(r'(?P<author>\w+)\.aticles\.(?P<id>\d{4})',"yuan.aticles.1234")
print(s6.group())
print(s6.group('id'))
print(s6.group('author'))

| :或

转义
\ :将特殊符号转换为普通符号. *,将部分普通符号转换为特殊符号\w \d
\w :任意字母和数字
\s :任意格式的空白空格
\b :匹配特殊字符边界

r:告诉python解释器不需要转义
python解释器正则\需要四个,即\\;或者加r,告诉python解释器不需要转义,两个,即\

贪婪匹配和非贪婪匹配

# 贪婪匹配:按照匹配最大的结果返回
print(re.findall("\d+","kj123jh45345jh345jh34j5"))
# 非贪婪匹配:按照匹配最小结果返回
print(re.findall("\d+?","kj123jh45345jh345jh34j5"))

三、re的方法

1.findall()

返回正则表达式在字符串中所有匹配结果的列表

2.finditer()

re.finditer() #匹配正则结果,返回迭代器

s = re.finditer('\d+','sd123fd1234ds12')
print(s)
print(next(s).group())  #获取结果
print(next(s).group())

3.search()

#只匹配第一结果就不匹配了,匹配成功返回一个对象,匹配不成功返回None
rec = re.search('\d+','sd123fd1234ds12')
print(rec)
print(rec.group())  #获取结果

4.match()

#只在字符串开始的时候匹配,匹配成功返回一个对象,匹配不成功返回None
rec = re.match('\d+','12sd123fd1234ds12')
print(rec)
print(rec.group()) #获取结果

5.split()

#按照正则规则分隔
s1=re.split('\d+','fsdf8098sdf809fg87',2) #2表示分隔次数
print(s1)

6.sub()

#替换
s2 = re.sub('\d+','A','hello 234jkhk234',1) #1表示替换次数
print(s2)

7.subn()

#替换补充,返回元组,返回替换次数
s3 = re.subn('\d+','A','hello 234jkhk234') #
print(s3)

8.compile()

#将正则规则实例化为对象,直接调用,方便多次字符串处理
s4 = re.compile('\d+')
s5 = s4.findall('hello123word123')
posted @ 2017-04-27 19:59  六神酱  阅读(155)  评论(0编辑  收藏  举报