1930251516

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、简介

正则表达式不是Python特有的语言,它是一门通用语言,在各类的编程语言中,都有引用,它的主要作用是用于处理字符串,它的功能非常强大,这里我只是介绍在Python内的一些操作

二、元字符

在介绍使用时候,不可避免要先了解元字符,下表只是列出常用的元字符。

 

三、根据前面的元字符,进行举例:

在使用Python的正则表达式前,需要先导入re模块,在这里我们是用findall进行举例:

函数参数说明:

 

1、"."例子:

var = re.findall('exm.ple', 'example')
print(var)
#输出,如成功匹配,会输出一个列表,否则是以空列表
['example']
注意"."只匹配一个字符

2、"^"例子:

var = re.findall('^exam', 'example')
print(var)
# 输出
['exam']

3、"$"例子:

var = re.findall('ple$', 'example')
print(var)
# 输出
['ple']

4、"*"例子:

var = re.findall('x*a', 'exxxample')
print(var)
# 输出
['xxxa']

这里要强调一下,一定是"*"前面的字母0次或多次

5、"+"例子:

var = re.findall('ex*a', 'eample')
print(var)
# 输出
['ea']

var = re.findall('ex+a', 'eample')
print(var)
# 输出
[]

6、"?"例子:

var = re.findall('ex?a', 'eample')
print(var)
# 输出
['ea']

var = re.findall('e?a', 'eample')
print(var)
# 输出
['ea']

7、"{ }"例子:

var = re.findall('ex{1}a', 'example')
print(var)
# 输出
['exa']

var = re.findall('ex{2}a', 'example')
print(var)
# 输出
[]

8、"{m,n}"例子:

var = re.findall('ex{1,5}a', 'exxxample')
print(var)
# 输出
['exxxa']

var = re.findall('ex{,5}a', 'eample')
print(var)
# 输出
['ea']

var = re.findall('ex{1,}a', 'exxxxxxxxxxample')
print(var)
# 输出
['exxxxxxxxxxa']

9、"[ ]"例子:

var = re.findall('e[a-z]a', 'example')
print(var)
# 输出
['exa']

var = re.findall('e[a-z]a', 'exxample')
print(var)
# 输出
[]

10、"[^]"例子:

var = re.findall('e[x]a', 'example')
print(var)
# 输出
['exa']

var = re.findall('e[^x]a', 'example')
print(var)
# 输出
[]

11、"[*]"例子:

var = re.findall('e[x*]a', 'example')
print(var)
# 输出
['exa']

var = re.findall('e[x*]a', 'e*ample')
print(var)
# 输出
['e*a']

四、特殊字符

这里只单独对"\b"进行一个解释

var = re.findall(r'i\b', 'i am big')  # 只匹配单词i
print(var)
# 输出:
['i']

var = re.findall(r'i\b', 'i&am big')  # 只匹配单词i
print(var)
# 输出:
['i']

var = re.findall(r'\bapp', 'myapp app aapple')
print(var)
# 输出
['app']

 这里注意一下,一定要加r,建议以后在进行正则的时候都加上r

五、设置flags不区分大小写

var = re.findall('com', 'COMwww')  # 默认区分大小写
print(var)
# 输出
[]

var = re.findall('com', 'COMwww', re.I)  # 通过修改flag,支持不区分大小写
print(var)
# 输出
['COM']

六、re模块下的方法

1、sub字符串替换

sub(pattern,repl,string,count,flags)

var = re.sub('a', 'b', 'aaaa')
print(var)
# 输出
bbbb

var = re.sub('a', 'b', 'aaaa',2)
print(var)
bbaa

2、subn不但进行字符串替换,还在最后告诉你替换的次数

var = re.subn('a', 'b', 'aaaa')
print(var)
# 输出
('bbbb', 4)

3、split

var = re.split('\d+', 'one1two2three')
print(var)
# 输出
['one', 'two', 'three']
a = re.split('[0-9]', 'aa22bb33cc44dd')
print(a)

a = re.split('[0-9]+', 'aa22bb33cc44dd')
print(a)
import re

var = re.split('\d+', 'one1two2three3')
var_list = [i for i in var if i]
print(var)  # 列表里面有空格
print(var_list)  # 去掉列表内的空格

# 输出
['one', 'two', 'three', '']
['one', 'two', 'three']

 

4、match 较少是用

只匹配字符串的起始位置,一旦匹配成功,就是一个match object对象,对象拥有以下几个方法:

 

group() 返回被RE匹配的字符串

start()返回匹配开始的位置

end() 返回匹配结束的位置

span() 返回一个元祖包含匹配(开始,结束)

 

5、search,可以匹配

 

七、分组

正则分组:去已经提取到的数据中再进行提取数据

1、search分组

origin = "has"
r = re.search("h\w+", origin)
print(r.group())  # 获取匹配到的所有结果
# 输出
has

# 这个时候我要想把取出的has在进行过滤
r = re.search("h(\w+)", origin)
print(r.group())  # 获取匹配到的所有结果
print(r.groups())  # 获取模型中匹配到的分组结果
print(r.groupdict())  # 获取模型中匹配到的分组结果
# 输出
has
('as',)
{}

r = re.search("h(?P<name>\w+)", origin)
# ?P<name>不代表任何过滤条件
print(r.group())  # 获取匹配到的所有结果
print(r.groups())  # 获取模型中匹配到的分组结果
print(r.groupdict())  # 获取模型中匹配到的分组结果
# 输出
has
('as',)
{'name': 'as'}

2、findall分组

origin = "has asdfasf hal"
r = re.findall("h(\w+)", origin)
print(r)  # 获取匹配到的所有结果
# 输出
['as', 'al']

origin = "hasaabc asdfasf halaabc"
r = re.findall("h(\w+)aabc", origin)
print(r)  # 获取匹配到的所有结果
# 输出
['as', 'al']

r = re.findall("h(\w+)a(ab)c", origin)  # 整体先匹配hasaabc 和 halaabc,再进行分组
print(r)  # 获取匹配到的所有结果
# 输出
[('as', 'ab'), ('al', 'ab')]

3、split分组

origin = "hello ab aaabbb"
r = re.split('ab', origin, 1) # 未分组
print(r)
# 输出
['hello ', ' aaabbb']

r = re.split('(ab)', origin, 1) # 分组
print(r)
# 输出
['hello ', 'ab', ' aaabbb']

 

 

'(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{'province''3714''city''81''birthday''1993'}

posted on 2016-11-18 15:16  1930251516  阅读(225)  评论(0编辑  收藏  举报