正则表达式(RE)
一. 动机
- 文本处理已经成为计算机的常见工作
- 对文本内容的搜索,定位,提取逻辑比较复杂
- 为了快速方便的解决上述问题,产生了正则表达式
二. 简介
- 定义:即文本的高级匹配模式,提供搜索,替换,查找等功能。其本质是一系列由字符和特殊符号构成的字串,这个字串即正则表达式。
- 匹配原理:通过普通字符和有特定含义的字符来组成字符串,用以描述一定的字符串规则,比如重复,位置等,来表达一类特定的字符串内容。
三. 元字符的使用
-
普通字符
匹配规则: 每个普通字符匹配对应的字符
In [14]: re.findall(‘ab’,‘abcdeabcda’)
Out[14]: [‘ab’, ‘ab’]注意:
- 正则表达式永远是作为一个规则整体匹配
- python中正则表达式可以匹配中文
-
或
元字符 : |
匹配规则: 匹配 | 两侧任意一个正则规则即可In [16]: re.findall(‘ab|cd’,‘abcdefghabcd’)
Out[16]: [‘ab’, ‘cd’, ‘ab’, ‘cd’] -
匹配开始位置
元字符 : ^
匹配规则: 使用^匹配目标字符串开头位置In [18]: re.findall(’^Hello’,‘Hello world’)
Out[18]: [‘Hello’] -
匹配结尾位置
元字符 : $
匹配规则: 使用 $ 匹配目标字符串结尾位置In [20]: re.findall(‘Jame$’,‘Hi,Jame’)
Out[20]: [‘Jame’]注意:正则表达式中如果有^ $ 必然出现在正则表达式的开始和最后。如果同时有^ $则正则必须匹配目标字符串全部内容。
-
匹配任意字符
元字符: .
匹配规则:匹配除换行外的任意一个字符In [25]: re.findall(‘小.’,‘小红说小王欺负小李’)
Out[25]: [‘小红’, ‘小王’, ‘小李’] -
匹配字符集中字符
元字符:[字符集]
匹配规则:匹配字符集中任意一个字符
表达形式:[#abc好坏] --> 匹配[]内任意一个字符
[0-9][a-z][A-Z] --> 匹配区间内的任意一个字符
[-_#0-9a-z] -->混合书写,区间写在后面In [30]: re.findall(’[aeiou]’,‘Hello world’)
Out[30]: [‘e’, ‘o’, ‘o’] -
匹配字符集反集
元字符: [^…]
匹配规则:匹配除了字符集中的任意一个字符In [3