xxx 正则、re模块
1. 正则表达式:
正则表达式是一个特殊的字符序列,能方便而快速的检查一个字符串是否满足某种规则。通过正则表达式可以快速的对字符串的内容进行判断和检索。
注意:正则表达式只作用于字符串。
正则表达式的规则:
- 元字符:. \w \s \d \n \t \b ^ $ \W \D \S | (…) […] [^…]
# 为了更好的展示,我们先了解下 re 模块 # re 模块是实现正则的模块 # re.findall(), 是匹配字符串里的所有情况,并返回一个列表 import re s = '124455whk324天涯' ret = re.findall('4', s) print(ret) # ['4', '4', '4'] # . 匹配换行符以外的任意字符 ret = re.findall('.', s) print(ret) # 由于没有换行符,就是全匹配了 # \w 匹配字母/数字/下划线 ret = re.findall('\w', '123agaf_!') print(ret) # ['1', '2', '3', 'a', 'g', 'a', 'f', '_'] # 虽然可以直接写 \w,但 \ 在Python中会发生转义,保险起见,一般让正则式子不经过转义 # 即在正则前面加上 r ret = re.findall(r'\w', '123agaf_!') print(ret) # ['1', '2', '3', 'a', 'g', 'a', 'f', '_'] # \s 匹配任意的空白符(\n 和 \t 等) ret = re.findall(r'\s', 'wgkk\njilk hagkka\tdkhfka') print(ret) # ['\n', ' ', '\t'] # \d 匹配数字 ret = re.findall(r'\d', 'ehigh123') print(ret) # ['1', '2', '3'] # \n 匹配换行符 ret = re.findall(r'\n', 'wgkk\njilk hag\nka\tdkhfka') print(ret) # ['\n', '\n'] # \t 匹配制表符 ret = re.findall(r'\t', 'wgkk\njilk hag\nka\tdkhfka') print(ret) # ['\t'] # \b 匹配一个单词边界,即单词和空格间的位置 ret = re.findall(r'er\b', 'never ') print(ret) # ['er'] print(re.findall(r'er\b', 'never我')) # []
import re # ^ 从字符串的开头匹配 ret = re.findall(r'^\d', '123abc321') print(ret) # ['1'] # $ 从字符串的结尾匹配 ret = re.findall(r'\d$', '12ahgk56') print(ret) # ['6'] # ^ 加 $ 表示从头到尾,也可看做全匹配 print(re.findall(r'^\d$', '1')) # ['1'] print(re.findall(r'^\d$', '123')) # [] # 另一种思路:^ 匹配字符串的开始符, $ 匹配字符串的结束符 # 大写字母的内容与小写字母的相反,如 \w 和 \W # \W 匹配非数字、字母或下划线 (非‘有意义内容’) print(re.findall(r'\W', '\n12\t45 ab我')) # ['\n', '\t', ' '] # 匹配了换行符、制表符、空格(等) print(re.findall(r'\w', '我是小学生')) # \w 也可以匹配汉字 # ['我', '是', '小', '学', '生'] # \D 匹配非数字 print(re.findall(r'\D', 'q3h3i1我\n')) # ['q', 'h', 'i', '我', '\n'] # \S 匹配非空白符 print(re.findall(r'\S', 'q3我\n')) # ['q', '3', '我'] # \B 匹配非单词边界,即非单词和空格的边界 print(re.findall(r'e\B', 'here ')) # ['e'] 后一个e匹配不到 print(re.findall(r'e\B', 'me我')) # ['e'] print(re.findall(r'e\B', 'he')) # [] print(re.findall(r'e\b', 'he')) # ['e'] 在最后,\b也可以匹配
import re # | 表示或的意思, a|b 表示匹配a或b ret = re.findall(r'1|a', '123abc') print(ret) # ['1', 'a'] # (…) 匹配括号内的表达式,也表示一个组 # 这个具体看后面的分组 # […] 和 [^…] # 这两个称为字符组,前者是匹配字符组中的字符; # 后者是匹配除了字符组中字符的其他所有字符 ret = re.findall(r'[123abc]', 'sabc123456') print(ret) # ['a', 'b', 'c', '1', '2', '3'] ret = re.findall(r'[^123a]', '456123avf') print(ret) # ['4', '5', '6', 'v', 'f'] # 一些常见用法: # [0-9] 匹配数字 # [a-z] 匹配小写字母 # [A-Z] 匹配大写字母 # [0-9a-zA-Z_] 匹配数字、字母和下划线 # [a-zA-Z] 匹配字母 # [1-5] 匹配数字1 至 5
# [\s\S] [\d\D] [\w\W]是三组全集 意思是匹配所有字符
- 量词:* + ? {…}
''' 量词,表示对前一个正则符号的重复次数 ''' import re # * 重复零次或更多次(0,1次或以上) print(re.findall(r'\d*', '12345')) # ['12345', ''] # + 重复1次或更多次(1次或以上) print(re.findall(r'\d+', '12345')) # ['12345'] # ? 重复零次或1次 print(re.findall(r'\d?', '12345')) # ['1', '2', '3', '4', '5', ''] # {n} 重复n次 s = '1,12,123,1234,12345,123456' print(re.findall(r'\d{4}', s)) # ['1234', '1234', '1234'] # {n,} 重复n次或以上 print(re.findall(r'\d{5,}', s)) # ['12345', '123456'] # {n,m} 重复n到m次 print(re.findall(r'\d{3,5}', s)) # ['123', '1234', '12345', '12345']
- 贪婪匹配:
2. re模块:

浙公网安备 33010602011771号