正则表达式(未完待续)

01-02 正则表达式

一、简介

#正则表达式定义
能够表示一定意义的【字符串】的组合就是正则表达式,正则表达式就是一个字符串


#正则表示式的来源
1.来源--unix操作系统。正则表达式  叫做posix (两个版本bre和ere)
2.prel, python等语言,都有独特的正则语法。叫做pcre正则
3.常用的两大正则  posix系列和pcre系列
4.prel语言使用【pcre】, c语言使用【posix】, php【pcre/posix】, python使用【pcre】

#正则的作用
1.字符串过滤:在字符串中获取需要的部分字符。
2.验证字符串:用户名,密码相关的输入框。
3.切割字符串:划分字符内容。
4.替换字符串:替换文章相关的信息。
5.爬虫中大量使用正则。

二、正则表达式的组成

'''
正则的组成:由原子,元字符及模式修正符组成 。【其他语言中可能存在定界符】
'''


#原子:
组成正则表达式的最小单位,一个正则表达式至少需要一个原子。
1.所有可见字符都是原子:a,b,c,d,A,B,C,D,你,我,他+—*&……%¥#@
2.所有不可见字符也是原子:\t, \n, \r......(转义字符)
3.正则专用转义字符:
\d  表示0~9之间任意【一个】字符 -> [0123456789]自定义原子列表格式
\D  表示除了0~9之外的任意【一个】字符 -> [^0-9]自定义排除格式
\s	表示任意【一个】空白字符 (空格(' '), 换页('\f'), 换行('\n'), 	   回车('\r'), 水平制表符('\t'),垂直制表符('\v')) -> [             \r\t\n\f\v]自定义原子列表
\S	表示任意一个非空白字符(可见字符) -> [^ \r\n\f\v\t]自定义排除列	 表格式
\w	表示0~9a~zA~Z和_中的任意【一个】字符 -> [0~9a~zA~Z_]自定义列表	格式
\W	表示除了0~9a~zA~Z和_之外的任意【一个】字符 -> [^0~9a~zA~Z_]自	定义排除列表格式
.	表示任意一个字符[除了\n] [^\n]


#元字符:[原子修饰符]
	[] 自定义原子列表
    	表示自定义原子列表中的任意一个字符,如果多个字符在ascii码中连     续的,可以进行缩写。例如[0123456789] -> [0-9]
        
        
    [] 自定义排除列表
    	表示自定义原子列表之外的任意一个字符如果多个字符在ascii码中连     续的,可以进行缩写。例如\D ->[^0-9]
        
        
    与数量相关的元字符
    +	表示1个或者多个修饰的原子 【1,正无穷】 {1,}
    ?	表示0个或者1个修饰的原子 【0, 1】 {0,1}
    *	表示任意一个修饰的原子 【0, 正无穷】 {0,}
    {m} 表示必须为m个修饰的原子
    {m,n}	表示必须为m到n个修饰的原子 m,n都包含在内
    {m,}	表示必须为m到正无穷个修饰的原子【m, 正无穷】
    {,n}	表示必须为小于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>)  自定义模式单元的名称 (html标签常用)
4.(?P=name)	 获取自定义模式单元的名称
5.(?#)   正则注释内容,解析器不会处理     
6.(?=)   正向先行断言  (零宽断言)     
7.(?!)	 负向先行断言  (零宽断言)
8.(?<=)  正向后行断言  (零宽断言)
9.(?<!)	 负向后行断言  (零宽断言)
10.(?(id/name)Y|N)	根据模式单元是否存在决定使用Y的规划(模式单元存在)或者是N的规划(模式单元不存在)   

三、re模块

###正则表达式本质是字符串,单独使用没有意义的。正则表达式需要配合正则相关的函数和方法


###步骤
'''
#1.导入re模块
import re

##search方法:查找符合正则表达式的内容

#2.准备正则表达式
pattern = r'baidu' (r模式,取消转义字符的意义。比如\,\s这些)

#3.正则查找的字符串
url = 'http://www.baidu.com'

#4.匹配操作
result = re.search(pattern, url)
print(result)
'''
匹配过程是拿着 pattern到url进行挨个字符串的匹配
'''
#结果
<_sre.SRE_Match object; span=(11, 16), match='baidu'>
'''


###re模块的方法
re.compile()
re.escape()
re.findall()
re.finditer()
re.match()
re.search()
re.split()
re.sub()
re.subn()

re文档

posted @ 2020-03-16 20:04  Micheal_L  阅读(214)  评论(0编辑  收藏  举报