python学习-正则表达式

#原子:

\d 表示0~9之间的任意【一个】字符->[0-9]自定义原子列表

\D 表示除了0~9之外的任意【一个字符】->[^0-9]自定义排除列表

\s 表示任意【一个】空白字符(不可见字符)->[\n\r\t\v\f]自定义原子列表

\S 表示任意【一个】非空白字符(可见字符)->[^\n\r\t\v\f]自定义排除列表

\w 表示0~9 a~z A~Z和__中的任意【一个】字符->[a-z0-9A-Z]自定义原子列表

\W 表示除了0~9 a~z A~Z和__之外的任意【一个】字符->[^a-z0-9A-Z]自定义排除列表

.  表示任意【一个】字符,除了\n

#元字符 [自定义原子列表]

  []自定义原子列表
    表示自定义原子列表中的任意一个字符

与数量相关的原子符

+ 表示1个以上的修饰原子    {1,}
? 表示0个或者1个修饰的原子 {0,1}
* 表示任意一个修饰的原子   {0,}
{m} 表示必须是m个修饰的原子
{m,n} 表示修饰的原子数量是m到n之间的数量都可以(包含m,n)
{m,} 表示修饰的原子数量是m个到正无穷(包含m)
{,n} 表示修饰的0-n的修饰原子(包含0也包含n)

\A 表示限定内容必须在整个字符串的开头部位
\Z 表示限定内容必须在整个字符串的结束部位
^ 表示限定内容必须在整个字符串的开头部位 支持多行匹配
$ 表示限定内容必须在整个字符串的结束部位 支持多行匹配

\b 表示能够当做英文单词分割的字符,(除了字母和数字 都是词边界,汉字作为字母处理)

\B 表示不能够当做英文单词分割的字符(非词边界,就是字母和数字)代表一个字符【代表一个字符】

| 表示选择关系 左右的内容二选一

() 1.改变正则表达式中的优先级

2.将多个原子视为一个原子处理,方便使用元字符【可以叫做组或者模式单元】

3.将匹配的内容做模式单元进行存储

额外补充:多行模式,如果字符串中包含\n则可以在匹配的时候使用多行匹配模式
     多行匹配模式就是将每一行当做独立的字符串进行匹配
     注意:多行模式需要使用模式修正符

#模式修正符

设定匹配的一些额外的规则
re.A   或者 re.ASCII   在ASCII模式下进行操作
re.U   或者 re.UNICODE 在UNICODE模式下进行正则匹配操作  默认情况下
re.S   使得原子.可以匹配任意字符包含\n
re.M   或者 re.MULTILINE 匹配操作在多行模式下进行  都是与^和$相关
re.X   或者 re.VERBOSE 匹配的时候忽略正则表达式中的空格或者注释
re.I   或者 re.IGNORECASE 匹配过程中忽略大小写

\转意字符的应用

字符串:\n \r \t \\ ...

因为在正则的元字符和原子当中,使用了部分的符号作为语法,为了匹配这些符号的单纯字符

在正则表达式用,添加\即可去掉意义,获取字符

扩展正则语法

  1.  (?Limsux)   模式修正符的应用
  2.  (?:)        取消单元存储功能
  3.  (?P<name>)  自定义模式单元的名称
  4.  (?P=name)   获取自定义模式单元的内容
  5.  (?#)        正则注释内容  解析器不会处理
  6.  (?=)        正向先行断言   (零宽断言)
  7.  (?!)        负向先行断言   (零宽断言)
  8.  (?<=)       正向后行断言   (零宽断言)
  9.  (?<!)       负向后行断言   (零宽断言)
  10. (?(id/name)Y|N) 根据模式单元是否存在决定使用Y规则(模式单元存在)或者是N的规则(模式单元不存在)

#re模块的方法

  complie()1.编译正则表达式获取正则表达式对象 2.可以循环利用,提高程序效率
             格式:  re.complie(正则字符串,模式修正符)
             返回值:正则对象

  escape()  对字符串进行转意处理。仅处理非数字和字母的字符
             格式: re.escape(字符串)
             返回值:字符串

  findall()  对字符串进行正则匹配  获取所有匹配的内容结果
             格式: re.findll(正则表达式,字符串,模式修正符)
             返回值:列表

  finditer() 对字符串进行正则匹配  获取所有匹配的结果对象
             格式: re.finditer(正则表达式,字符串,模式修正符)
             返回值:包含所有匹配结果的迭代器
 
  match()   对字符串的开头进行正则匹配,匹配到第一个结果停止匹配。
             格式: re.match(正则表达式,字符串,模式修正符)
             返回值:匹配结果对象


  search()  对字符串任意位置正则匹配 匹配到第一个结果停止匹配,返回结果对象
            格式:  re.search(正则表达式,字符串,模式修正符)
            返回值:匹配结果对象

  split()   使用正则表达式切割字符串
            格式:  re.split(正则表达式,字符串,切割次数)v
            返回值:返回一个列表
  
  sub()     正则替换
            格式:  re.sub(正则表达式,替换的字符换,匹配的字符串,替换次数)
            返回值:替换后的字符串

  subn()    正则替换
            格式:  re.subn(正则表达式,替换的字符换,匹配的字符串,替换次数)
            返回值:替换后的字符串和替换次数组成的元祖

爬虫(.*?)大法:

import re

str1 = 'xa6</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp'

presson = r'ref=(.*?)>About'
content = re.findall(presson,str1)
print(content[0]) 	#输出为:http://ir.baidu.com

把待匹配的字符替换为(.*?),前后加的字符越多匹配越准确。

原理:找(.*?)前后的字符,如果相同与相匹配的字符则返回。
缺点:这种表达式的匹配不够严谨
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像风一样的男人@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值