python语言之正则re使用方法

. \w \s \d a|b () [...] {} * +
1. 常用元字符
.   匹配除换行符以外的任意字符
\w  匹配字母或数字或下划线
\s  匹配任意的空白符
\d  匹配数字
\n  匹配一个换行符
\t  匹配一个制表符
^   匹配字符串的开始
$   匹配字符串的结尾
\w  匹配非字母或数字或下划线
\d  匹配非数字
\s  匹配非空白符
a|b 匹配字符a或字符b
()  匹配括号内的表达式,也表示一个组
[...]   匹配字符组中的字符
[^...]  匹配除了字符组中字符的所有字符
2. 量词:控制前面的元字符出现的次数
*       重复零次或更多次
+       重复一次或更多次
?     重复零次或一次
{n}     重复n次
{n,}   重复n次或更多次
3. 贪婪匹配和惰性匹配
.*  贪婪匹配
.*? 非贪婪匹配
'''
点: 匹配所有不包括换行
+: 表示重复一次或者更多次,就是说如果条件一直符合的话,就连续匹配
import re
def test_dot(): 
   data1 = 'hello \n world' 
   pattern = re.compile(r'.+') 
   res_list = pattern.findall(data1) 
   assert ['hello ', ' world'] == res_list, 're dot error'
2.点: 匹配所有包括换行
import re 
def test_dot2(): 
   # 有时候需要 . 能匹配所有字符,包括换行符, 就需要带上参数 re.s 
   data1 = ''
# (.+) 括号说明: 正常会取整个,加括号之后,就只取括号里面的了 
   ptn = re.compile(r'', re.s) 
   res_list = ptn.findall(data1) 
   assert ['hello \n world'] == res_list, 're dot 2 error'
3. \w: 匹配数字、字母 和 下划线
import re 
def test_w(): 
   data1 = 'ab_@.121' 
   # + 表示重复一次或者更多次,就是说如果条件一直符合的话,就连续输出,比如:ab_ 
   ptn = re.compile(r'\w+') 
   res_list = ptn.findall(data1) 
   assert ['ab_', '121'] == res_list, 're w error'
4.\s: 匹配任意的空白字符
import re 
def test_s(): 
   data1 = 'a b\tc\n d$#' 
   ptn = re.compile(r'\s+') 
   res_list = ptn.findall(data1) 
   assert [' ', '\t', '\n '] == res_list, 're s error'
5.\d: 匹配数字
import re 
def test_d(): 
   data1 = 'yidong 10086,liantong 10010' 
   ptn = re.compile(r'\d+') 
   res_list = ptn.findall(data1) 
   assert ['10086', '10010'] == res_list, 're d error'
6.^: 有两个地方用到: 1.本例中的匹配字符串的开始, 2. 在中括号中,取非
import re 
def test_start(): 
   data1 = 'ab1ab2' 
   ptn = re.compile(r'ab\d') 
   res_list = ptn.findall(data1) 
   assert ['ab1', 'ab2'] == res_list, 're ^ error'
# ^ 表示只匹配字符串的开始 
   data1 = 'ab1ab2' 
   ptn = re.compile(r'^ab\d') 
   res_list = ptn.findall(data1) 
   assert ['ab1'] == res_list, 're ^ 2 error'
7.$: 匹配字符串的结束
import re 
def test_end(): 
   data1 = '1ab2ab' 
   ptn = re.compile(r'\dab$') 
   res_list = ptn.findall(data1) 
   assert ['2ab'] == res_list, 're $ error'
8. |:  a|b 匹配字符串a或字符串b
import re 
def test_and(): 
   data1 = '12a_3$dc' 
   ptn = re.compile(r'\d+|a|d|c') 
   res_list = ptn.findall(data1) 
   assert ['12', 'a', '3', 'd', 'c'] == res_list, 're | error'
9. (): 表示一个组
import re 
def test_bracket(): 
   data1 = '' 
   ptn = re.compile(r'') 
   res_list = ptn.findall(data1) 
   assert ('1', 'xiaoxinmiao') == res_list[0], 're () error'
10. (): 可以通过?p定义组名
import re 
def test_bracket2(): 
   # 可以设置分组名 
   data1 = '' 
   ptn = re.compile(r'') 
   iter_obj = ptn.finditer(data1) 
   res_obj = iter_obj.__next__() 
   assert '1' == res_obj.group( 
       'id') and 'xiaoxinmiao' == res_obj.group('name'), 're () error'
11.(): 当有多组时的例子, 当然这种情况,直接用例子9更方便
import re 
def test_bracket3(): 
   # 可以设置分组名 
   data1 = '' 
   ptn = re.compile( 
       r'') 
   iter_obj = ptn.finditer(data1) 
   ids, names = [], [] 
   for i in iter_obj: 
       ids.append(i.group('id')) 
       names.append(i.group('name')) 
   assert ['1', '2'] == ids and ['miao1', 'miao2'] == names, 're () error'
12.[]: 匹配字符串中的字符, 其中 - 表示区间,例如:1-9表示1,2,3,4,5,6,7,8,9
import re 
def test_bracket_mid(): 
   data1 = '12dss#$$fwe564_' 
   ptn = re.compile(r'[1-9a-z_$]+') 
   res_list = ptn.findall(data1) 
   assert ['12dss', '$$fwe564_'] == res_list, 're [] error'
13.[^]: 匹配除了字符串中的值
import re 
def test_bracket_mid2(): 
   data1 = '12dss#$$fwe564_' 
   # [^] 表示不匹配里面的任何数 
   ptn = re.compile(r'[^1-9a-z_$]+') 
   res_list = ptn.findall(data1) 
   assert ['#'] == res_list, 're [] error'
14. +, * , ? 的理解,但是并不常用, 最常用的还是这个组合 .*?
def test_liangci(): 
   data1 = 'abccd' 
   # +: 前一个字符出现1次或者多次 
   re_list = re.findall(r'abc+', data1) 
   assert ['abcc'] == re_list, 're + error'
# *: 前一个字符出现0次或者多次 
   re_list = re.findall(r'abf*', data1) 
   assert ['ab'] == re_list, 're + error'
# ?: 前一个字符出现0次或者1次 
   re_list = re.findall(r'abc?', data1) 
   assert ['abc'] == re_list, 're + error'
16. .*?: 非贪婪模式, 直接看例子
import re 
def test_star2(): 
   # .* 贪婪 
   data1 = '我爱北京天安门,天安门上太阳升.' 
   res_list = re.findall(r'我爱(.*)天安门', data1) 
   assert ['北京天安门,'] == res_list, 're .* error' 
   # .*? 非贪婪 
   res_list = re.findall(r'我爱(.*?)天安门', data1) 
   assert ['北京'] == res_list, 're .* error'
17. {}: {n}重复多次,{n,}重复多次或者更多次
import re 
def test_bracket_big(): 
   # 只有两位数字才符合要求 
   data1 = 'a1b12c134d1234e' 
   res_list = re.findall(r'\d{2}', data1) 
   assert ['12', '13', '12', '34'] == res_list, r're {} error' 
   # 两位,以及两位以上的数字都符合要求 
   data1 = 'a1b12c134d1234e' 
   res_list = re.findall(r'\d{2,}', data1) 
   assert ['12', '134', '1234'] == res_list, r're {} error'
18. []: 实战,匹配中文
import re 
def test_zh(): 
   data1 ='我爱111北京%天安


电机驱动硬件电路分析
第四次工业革命的关键:边缘计算
航母下水一月多雄姿初现 双航母时代指日可待!
SDN产品打造新一代混合云网络架构
iphone8发布!iphone x指纹识别只有面部解锁,爱扫不扫但是这真的会带来更好的体验吗?
python语言之正则re使用方法
怎样评定电气专业助理工程师
数字货币可以带来哪一些想象
NSR:云计算加速卫星多个产业发展
如何解决区块链治理的难题
2.4G射频收发芯片 XL2407P芯片介绍,集成九齐单片机
实体经济为什么会因为区块链改革
红狮控制Crimson 3.1新增可用于OPC统一架构的增强型功能
日本电产新宝推出用于食品机械的伺服电机用减速机产品阵容
突破核心痛点-科尔摩根AGV打造陶瓷行业标杆案例
如何保障人工智能安全?其意义是什么?
全球物联网安全市场的主要供应商包括哪些?
三极管基本放大电路的频率响应
LOTO示波器_从零开始手把手测电源开环增益/电源环路频响曲线/PSM
用于传输音频信号的FM电路分享