Python Re模块

正则表达式,在对数据处理和爬虫阶段会用到。


re模块简介:

python自1.5版本起增加了re模块该模块提供了Perl风格的正则表达式模式

re模块使python语言拥有了全部正则表达式功能

三个函数:

match()

match(pattern,string ,flags=0)

尝试从字符串string的起始位置匹配一个pattern模式,如果不是起始部位匹配成功的话就返回None

pattern:匹配的正则表达式

string,要匹配的字符串

flgs:标志位,用于控制正则表达式的匹配方式

re.I:使匹配对大小写不敏感

re.L:做本地化识别匹配

re.M:多行匹配,影响$和`

re.S:使.匹配的包括换行符在内的所有字符

re.U:根据Unicode字符集解析字符,影响\w \W \b \B

re.X:通过给予我们功能灵活的格式以便更好的理解正则表达式

search()

search(pattern,string ,flags=0)

扫描整个字符串string 返回第一个成功的匹配对象

findall()

findall(pattern,string ,flags=0)

扫描整个字符串string返回一个列表

正则表达式:

1.匹配单个字符或数字

. 匹配任意字符,除换行符 当flags被指定为 re.S时,可以匹配包含换行符以内的所有字符

如果没有指定并且还想匹配所有字符  .\n

[]:密码是字符的集合,匹配[]里面任意一个字符

[a-z]:匹配所有小写字母

[A-Z],[0-9] [a-zA-Z]  [^a-z]:除了a-z以外的任意字符

\d:配置任意的数字字符

\D:匹配任意的非数字字符

\w: 匹配包括下划线的任意单词和数字

\W: 匹非下划线的任意单词和数字

\s:匹配任意空白符(空格 换页 换行 回车 制表符)[\f\n\r\t]

\S 匹配非空白符。

锚字符

^   行首匹配和[]中的不是一个意思。

$   行尾匹配

边界字符:

\A: 匹配字符串开始,\A只匹配整个字符串的开头 即使在re.M下也不会匹配其他的行首

\Z: 匹配字符串结尾,\Z只匹配整个字符串的结尾 即使在re.M下也不会匹配其他的行尾

\b: 匹配一个单词的边界,指单词和空格的位置

\B: 匹配一个非单词的边界,指单词和空格的位置

匹配多个字符

(xyz)作为一个整体去匹配的

x? 匹配一个或者0个x,非贪婪

x* 匹配0个或任意个x

x+ 匹配至少一个x

x{n} 匹配n个x n是非负数

x{n,} 匹配至少n个x

x{n, m} 匹配至少n个 最多m个x

x|y 匹配x或者y

切分字符串

re.split(r" +",str)

finditer(pattern, string , flags=0)

作用:类似findall 返回一个跌抬起

区别:findall返回所有匹配的字符,并村委一个列表,如果数据太多,占用内存,而finditer

并不是直接返回所有找到的所有字符串,而且返回一个迭代器,可以通过next迭代

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

subn(pattern, repl, string, count=0, flags=0)

作用:在目标字符串string中朝赵匹配的pattern模式字符,再把他们替换成指定的repl字符串

可以指定最多替换count次,否则替换所有。

参数:

pattern:正则表达式

repl:替换的字符串

string:目标字符串

count:最多的次数

flags:标识一般不改变值

区别:sub 返回一个被替换的字符串,subn返回一个元组,元组第一个元素为被替换的字符串 第二个

元素为发生了多少次替换

分组:

概念:除了简单的判断是否匹配之外,正则表达式还有提取字符串的功能,用()表示的就是要提取的分组

m = re.search(r"(?P<aa>\d{3})-(?P<bb>\d{8})","aaa010-56781234bbb")

print(m.group(2))

print(m.group(1))

print(m.group("aa"))

编译:

概念:当在python中使用正则表达式时,re模块会做两件事情,一件事编译正则表达式,日过表达式的字符串本身不合法,会报错,一件是

用编译后的正则表达式去匹配字符串

re.compile()

优点:如果一个正则表达式要使用几千遍,每一次都会编译,处于时间的考虑提前编译就不用一次次的编译了。

贪婪匹配:

尽可能少的匹配

*?

+?

??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值