caicaix

导航

正则表达式和re模块

正则表达式

它是一门独立的语言,其他语言可以使用正则表达式来做一些功能,主要用于筛选数据(不会写可以百度)

利用一些特殊符号匹配想要的数据就是正则表达式 , 简称正则

 

1.字符组([ ... ]、\d)

匹配单个字符在多种情况内

[12345]  # 匹配1-5之间

[a—z1—9]  # 匹配a-z和1-9之间

\d  #匹配一个数字

 

2.字符

1. .

  匹配除换行符之外的任意数字

2. \w

  匹配字母数字或下划线

3. \n

  匹配一个换行符

4. ^

  匹配字符串的开始

5. $

  匹配字符串的结尾

6. a|b

  匹配字符a或者字符b

7. [ ... ]

  匹配字符组中的数字

8. \d

  匹配数字 

9. [ ^... ]

  匹配除了字符组中字符是的所有字符

 

10.()                      11. \t    

  匹配括号内的表示式,也表示一个组         匹配一个制表符

12. \b                      13. \w    

  匹配一个单词的结尾                匹配非字母或数字或下划线

14. \D                      15. \S  

  匹配非数字                    匹配非空白符

16. \s

  匹配空白符

 

3.量词

  1.量词只能影响前面一个字符

  2.量词不能单独使用,必须配合其他字符

 

1. *

  重复零次或更多次

2. +

  重复一次或者更多次

3. ?

  重复零次或一次

4. {n}

  重复n次

5. {n,}

  重复n次或更多次

6. {n,m}

  重复n次到m次​​

 

4.贪婪匹配和非贪婪匹配

当使用 . * 进行匹配时,默认匹配就是贪婪匹配,尽可能多的匹配

将贪婪匹配转为非贪婪匹配

  . *?

 

5.补充(转义字符)

\ 一般配合特殊字符使用,当需要使用 \没有特殊含义时就再加一个 \ 进行转义

一个斜杠只能转义一个字符

 

re模块(

re:regular express

1.re是内置的模块,可以直接使用

2.在python中,要想使用正则需要借助于re模块

import  re  # 导入re模块

 

关键字

1.findall

re.findall('正则表达式' ,'待匹配的文件')

匹配到的结果用列表收集,如果没有则为列表

 

2.search、group

search返回匹配情况,用group取得结果,如果匹配不到的话就会返回,如果匹配到就返回第一个匹配到的字符

None

1 import re
2 res = re.search('a.', 'dsushfiusahafiusahaaciusaa')
3 print(res.group())      # ah
4 res = re.search('cc', 'dsushfiusahafiusahaaciusaa')
5 print(res)     # None

 

3.match

从头开始匹配

 

分组

1.无名分组

1.用search匹配时如果正则表达式中有分组时,用group取值时,括号内如果不填值时,默认取全部,如果里面填了数字,则按照数字返回分组对应的值

1 import re
2 res = re.search('^[1-9](\d{14})(\d{2}[0-9x]?)$','110105199812067023')
3 print(res)
4 print(res.group())    # 110105199812067023
5 print(res.group(1))   # 10105199812067
6 print(res.group(2))   # 023

 

2.用findall匹配时如果正则表达式内有分组时,取值时列表内会返回分组的内容,如果有多个分组,则用列表套元组的模式返回。如果要取消分组优先展示,则在分组内前面加一个 ?:即可,也称之为无名分组

1 import re
2 
3 res = re.findall('^[1-9](\d{14})(\d{2}[0-9x]?)$', '110105199812067023')
4 print(res)  # [('10105199812067', '023')]
5 res = re.findall('^[1-9]\d{14}(?:\d{2}[0-9x]?)$', '110105199812067023')
6 print(res)  # ['110105199812067023']

 

2.有名分组

在正则表达式分组中前方加上 ?P<xxx>,<>括号内填写分组的名字,用search和group取值时,并不改变group原有的取值方式的基础上,group括号可以填写有名分组的名字来取值

1 import re
2 
3 res = re.search('^[1-9](\d{14})(?P<month>\d{2}[0-9x]?)$','110105199812067023')
4 print(res.group('month'))

 

posted on 2023-06-09 17:29  菜CAIx  阅读(5)  评论(0编辑  收藏  举报