re模块

1.什么是正则表达式?

普通字符和元字符构成的字符串,描述一类字符串规则

2.什么是元字符?

有特殊含义的符号

3.匹配规则

匹配符-纵向-字符组

  • [ ]匹配一个字符
    [abc]           #  表示匹配a b c 其中任意一个
    [^abc]          # [^表示匹配除了a b c 外其中任意一个]
    [a-zA-Z0-9]     # 表示匹配 小写字母/ 大写字母/ 数字 其中任意一个
    
  • \d = [0-9]
    \D = [^0-9]
    
    \w = [a-zA-Z0-9_]       # 数子、小写字母、大写字母和下划线
    \W = [^a-zA-Z0-9_]
    
    \s = [\t\v\n\r\f]       #  匹配空白符(空格、水平制表符、垂直制表符、换行符、回车符、换页符)
    \S = [^\t\v\n\r\f]      #  匹配非空白符
    
    . = [^\n\r\u2028\u2029]	#  通配符,不匹配 换行符 回车符 行分隔符 段分隔符
    
    

多选分支

  • (a|b|c)         # 或的关系 
    [a|b|c]         # 或的关系 
    

匹配符-横向-量词

  • X{m,n}      #  x匹配m到n次
    X{m,}       #  x匹配至少m次
    X{m}        #  x匹配m次
    
  • X*          #  X匹配任意次数,包括0次
    X+          #  X至少匹配一次
    X?          #  X匹配0次或一次
    
    

贪婪模式和惰性模式

  • 贪婪模式 惰性模式
    {m,n}?
    {m,}?
    ? ??
    + +?
    * *?

4.匹配函数

flags修饰符

修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

re.findall

功能:根据正则表达式匹配目标字符串内容

re.findall(正则表达式,需要匹配的字符,flags=0)

返回值:匹配到的内容列表,【如果正则表达式有子组则只能获取子组对应的内容】

import re
# 

print(re.findall('\w','adc123_*()-='))

>>> ['a','b','c','1','2','3','_']

re.match

从字符串开始位置匹配,匹配开头,匹配不成功返回None

import re

a = 'python'
print(re.match('p',a).group())
>>> p

re.seach

扫描这个字符串,返回第一个成功匹配的结果

import re

a = 'py11t22ho33n'
print(re.seach('\d+',a).group())
>>> 11

re.compile

功能:生产正则表达式对象,避免重复定义相同的规则

使用compile创建的对象,不用传入正则表达式了

用compile创建的对象
调用其他方法时候(str,start,end)
	str:目标字符串
	start:截取目标字符串开始位置
	end:截取目标字符串结束位置
和直接使用re相比,多了截取功能
import re

a = '/index/id=224452454'
pattern = '/index/?id=\d'

# 普通
l = re.match(res,a).group()
print(l)
>>> /index/id=2

# 使用complie(不用传入正则表达式了)
regex = re.compile(pattern)  # 定义好后直接可以无限制调用
l = regex.match(a).group()
print(l)
>>> /index/id=2

案列

import re

string = """Merged by land 111-222-333-444 to #43457668
Verify token xxx1xxx1xxx1
1/1 holo_frontend https://nkippis.com

Merged by land 555-666-777-888 to #43457668
Verify token xxx2xxx2xxx2
1/1 holo_frontend https://nkippis.com

Discussed-in: Merge-Request 8888888, URL: https://nkippis.com
Discussed-in: Merge-Request 9999999, URL: https://nkippic.com
"""

regex = re.compile('Merged by land (.*?) ')
merged_list = regex.findall(string)
print(merged_list)  # ['111-222-333-444', '555-666-777-888']

regex = re.compile('Verify token (.*)')
token_list = regex.findall(string)
print(token_list)  # ['xxx1xxx1xxx1', 'xxx2xxx2xxx2']

re.sub

替换,返回替换后的字符串

re.sub(正则patten,替换字符repl,被匹配字段string,替换次数count,flags=0)

import re

res = re.compile('\d+') 
a = 'py454thon464aaa'
print(re.sub(res,'++',a))
>>> py++thon++aaa

re.split

分割,返回切割后的列表

re.split(正则patten,被匹配字段string,分割次数maxsplit,flags=0)

import re

res = re.compile('\d+') 
a = 'py454thon464aaa'
print(re.split(res,a))
>>> ['py','thon','aaa']
posted @ 2022-06-19 21:01  lxd670  阅读(35)  评论(0编辑  收藏  举报