1、正则表达式的作用
做字符串的匹配
2、正则表达式的规则
-
字符组:[字符组]。在同一个位置可能出现的各种字符串组成的一个字符,在正则表达式中用[]表示,字符分为很多类,比如数字、字母、标点等
- 元字符。
(1). 匹配除了换行符以外的任意字符
(2) \w 匹配字母、数字、下划线
(3) \s 匹配任意的空白符
(4) \d 匹配数字
(5) \W 匹配非数字、字母、下划线
(6) \S 匹配非空白符
(7) \D 匹配非数字
(8) \n 匹配一个换行符
(9) \t 匹配一个制表符
(10) \b 匹配一个单词的结尾
(11) ^ 匹配字符串的开始
(12) $ 匹配字符串的结束
注意:若^和$遇在一起则约束整个字符串
(13) a|b 匹配a或b
(14) () 匹配括号内的表达式,也表示一个组
(15) [^...] 只要字符组内出现了^就匹配除了字符组中字符的所有字符
- 量词:所有量词都必须用在正则规则的后面,所有的量词都只能约束它前面的一个规则
(1) * 匹配零次和多次
(2) + 匹配一次或多次
(3) ? 匹配零次或一次
(4) {n} 重复n次
(5) {n, } 最少匹配n次
(6) {n, m} 匹配n次到m次
- 其他
(1) .*? 取尽量少的任意字符,一般不会单独写。.*?x取前面任意长度的字符,知道一个x出现
- re模块
import re
#findall 分组优先
ret = re.findall('[a-z]+', 'eva egon yuan') # 返回所有满足条件的结果放在列表中
print(ret)
>>>
['eva', 'egon', 'yuan']
#search
ret = re.search('[a-z]+', 'eva egon yuan') # 从前往后找到一个就返回,返回一个对象
print(ret.group())
>>>
eva
#match 从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量
# 匹配的内容需要用group才能显示
# 如果没匹配上,就返回None,调用group会报错
ret = re.match('ev', 'eva egon yuan')
print(ret.group())
>>>
ev
#split 分割,分组优先
ret = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd', 再对''和'bcd'分别按'b'分割
print(ret)
>>>
['', '', 'cd']
# 替换
ret = re.sub('\d', 'H', 'fdksjfids5f4sf654ds5f')
print(ret)
>>>
fdksjfidsHfHsfHHHdsHf
# subn替换并返回替换了几次
ret = re.subn('\d', 'H', 'fdksjfids5f4sf654ds5f')
print(ret)
>>>
('fdksjfidsHfHsfHHHdsHf', 6)
#compile建一个正则表达式编译成为一个对象,反复用的时候
obj = re.compile('\d{3}')
ret = obj.search('abc123eeee')
print(ret.group())
>>>
123
# finditer 返回一个存放匹配结果的迭代器
ret = re.finditer('\d', 'ds3ssy4784a') # finditer 返回一个存放匹配结果的迭代器
print(ret)
print(next(ret).group()) #查看第一个结果
print(next(ret).group()) #查看第二个结果
print([i.group() for i in ret])
>>>
<callable_iterator object at 0x000001DFB917C390>
3
4
['7', '8', '4']