正则表达式

动机

  1. 处理文本成为计算机常见工作之一
  2. 对文本内容的搜索提取是一项比较复杂困难的工作
  3. 为了快速方便处理上述问题,正则表达式技术诞生,逐渐发展为一个被众多语言使用的独立技术

定义

  即高级文本匹配模式,提供了搜索,替代等功能。本质是由一系列特殊符号和字符组成的字串,这个字串即使正则表达式。这个表达式描述了字符和字符的重复行为,可以匹配一类特征的字符串。

目标:
1. 熟练使用正则表达式符号
2. 能够正确的组合和理解一般的正则表达式
3. 能够使用python操作正则表达式

正则表达式特点:
* 方便进行检索和修改
* 支持语言众多
* 灵活多样
* mongo正则类型,django等框架作为url匹配,爬虫

正则表达式的使用
python —> re模块 处理正则表达式

re.findall(pattern, string)
功能:使用正则表达式匹配字符串
参数:pattern 正则表达式
   string 目标字符串
返回值:一个列表 匹配到的所有内容

元字符

(即正则表达式中有特殊含义的符号)
1. 普通字符
元字符:abc (数字字母下划线)
匹配规则:匹配相应的普通字符
2. 或
元字符:ab|cd
匹配规则:匹配|两边任意一个正则表达式符合的情况
**|两侧不要有没用的空格,并且检索时元素不会重叠得到结果
3. 匹配单一字符
元字符:.
匹配规则:匹配除了换行之外的任意字符
4. 匹配开始位置
元字符:^
匹配规则:匹配一个字符串的开始位置
5. 匹配结束位置
元字符:$
匹配规则:匹配目标字符串的结束位置
6. 匹配重复
元字符:*
匹配规则:匹配前面的正则表达式重复0次或多次
7. 匹配重复
元字符:+
匹配规则:匹配前面的正则表达式重复1次或多次
8. 匹配重复
元字符:?
匹配规则:匹配前面的正则表达式重复0次或1次
9. 匹配重复
元字符:{n}
匹配规则:匹配指定的重复次数
10. 匹配重复
元字符:{m,n}
匹配规则:匹配前面的正则表达式重复m次到n次
11. 匹配字符集合
元字符:[]
匹配规则:匹配括号范围内的任意一个字符
[abc123d]
[a-z]
[A-Z]
[0-9]
[123a-zA-Z]
12. 匹配字符集和
元字符:[^…]
匹配规则:匹配除指定字符集之外的任意字符
13. 匹配任意(非)数字字符
元字符:\d \D
匹配规则:\d 匹配任意数字字符
     [0-9]
     \D 匹配任意非数字字符
     [^0-9]
14. 匹配(非)普通字符 (普通字符:数字字母下划线)
元字符:\w  \W
匹配规则:\w 匹配任意一个普通字符
     [_0-9a-zA-Z]
     \W 匹配任意非普通字符
     [^_0-9a-zA-Z]
15. 匹配(非)空字符
元字符:\s \S
匹配规则:\s 匹配任意空字符
     \S 匹配任意非空字符
16.匹配起止位置
元字符:\A \Z
匹配规则:\A 匹配开始位置 ^
     \Z 匹配结束位置  $
绝对匹配 \Aabc\Z —> abc(且字符串只是abc)
17.匹配单词(非)边界位置
元字符:\b   \B
匹配规则:\b 匹配单词的边界
     \B 匹配非单词的边界
单词边界:数字字母下划线和其他字符的交界位置为单词的边界

元字符总结

匹配单个字符:
a . \d \D \w \W \s \S […] [^…]
匹配重复性:
* + ? {n} {m,n}
匹配某个位置:
^ $ \A \Z \b \B
其他:
| () \ 

转义字符

贪婪和非贪婪
正则表达式默认的重复匹配模式:贪婪模式
当匹配到的时候,会尽可能多的向后匹配

* + ?{m,n} 这四种情况下会产生贪婪模式

非贪婪模式:尽可能少的匹配内容,满足正则表达式含义即可
贪婪 —> 非贪婪 *? +?  ??  {m,n}?

正则表达式分组
使用()可以为一个正则表达式建立一个子组,子组可以看作内部的整体

子组的作用
1.增加子组后对正则表达式整体的匹配内容没有影响
2.子组可以改变重复元字符的重复行为
3.子组在某些操作中可以对子组匹配内容单独提取

子组的注意事项
1.每个正则表达式可以有多个子组,由外到内,由左到右为第1,第n…子组
2.子组通常不要交叉

捕获组和非捕获组(命名组和非命名组)
子组命名格式
(?P< name>abc)
1.很多编程接口可以直接通过名字获取子组匹配内容
2.捕获组中的正则表达式可以通过名字重复调用
(?P=name)

匹配身份证号

re模块

compile(pattern, flags=0)

功能:获取正则表达式对象
参数:pattern 正则表达式
   flags 功能标志位,提供更丰富的匹配
返回值:正则表达式对象

re模块和compile对象均有的函数

obj.findall(string, pos, endpos)

功能:通过正则表达式匹配字符串
参数:string 目标字符串
   pos 目标字符串的匹配开始位置
   endpos 目标字符串的结束位置
返回值:匹配到的所有内容以列表返回
*如果正则表达式有子组则只显示子组匹配内容

obj.split(string)

功能:按照正则表达式切割目标字符串
参数:目标字符串
返回值:切割后的内容

obj.sub(replaceStr, string, max)

功能:替换正则表达式匹配到的内容
参数: replaceStr 要替换的内容
    string 目标字符串
    max 最多替换几处
返回值:返回替换后的字符串

obj.subn(repl, string, count)

功能:替换正则表达式匹配到的内容
参数: repl 要替换的内容
    string 目标字符串
    count 最多替换几处
返回值:返回替换后的字符串和实际替换的个数

re.finditer(pattern, string)

功能:使用正则表达式匹配目标内容
参数:目标字符串
返回值:迭代对象 迭代的每个内容为一个match对象

re.match(pattern, string)

功能:匹配一个字符串开头
参数:目标字符串
返回值:如果匹配到返回 match obj
    没有匹配到返回 None
    

re.search(pattern, string)

功能:匹配一个字符串
参数:目标字符串
返回值:如果匹配到返回 match obj
    没有匹配到返回 None
* match 只能匹配字符串的开头位置,search可以匹配任意位置,但是也只能匹配一处
* 通常match对象调用其属性时往往需要try异常处理

fullmatch()

要求目标字符串完全匹配,没有完全匹配会报错

compile 对象 属性方法 (re模块没有)

flags:标志位
pattern:正则表达式
groupindex:捕获组形成的字典
groups:多少个子组

match 对象属性方法

属性

match_obj.pos 目标字符串的开头位置
match_obj.endpos 目标字符串的结束位置
match_obj.re 正则表达式对象
match_obj.string 目标字符串
match_obj.lastgroup 最后一组的名字
match_obj.lastindex 最后一组是第几组

方法

match_obj.start() 匹配到的内容的开始位置
match_obj.end() 匹配到的内容的结束位置
match_obj.span() 匹配到内容的起止位置(即将以上两项形成一个二元元组返回)

match_obj.group(n)
功能:获取match对象匹配的内容
参数:默认为0,表示获取正则整体的匹配内容
   如果传入大于0的正数则表示获取对应子组匹配内容
返回值:返回匹配到的内容

match_obj.groups()
功能:得到所有子组匹配的内容

match_obj.groupdict()
功能:得到所有捕获组匹配的内容
返回值:字典,键为组名,值为子组

作业:
  读取一个文件内容,将文件中所有的以大写字母开头的单词匹配出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值