正则表达式re

正则表达式re

1.使用

1.1 匹配全部
  • 不使用compile对象
rs = re.findall(r'ab', "abcdefabcd")
print(rs)  # ['ab', 'ab']
""" 
 re.findall(pattern,string,flags = 0)
 功能: 根据正则表达式匹配目标字符串内容
 参数: pattern  正则表达式
      string 目标字符串
      flags  功能标志位,扩展正则表达式的匹配
 返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容
"""
  • 使用compile对象
pattern = r'ab'
regex = re.compile(r'ab')
rs = regex.findall("abcdefabcd")
print(rs)  # ['ab', 'ab']
1.2 切割
  • 不使用compile对象
rs = re.split(r'ab', "abcdefabcd")
print(rs)  # ['', 'cdef', 'cd']
"""
 re.split(pattern,string,max,flags = 0)
 功能: 使用正则表达式匹配内容,切割目标字符串
 参数: pattern  正则表达式
      string 目标字符串
      max 最多切割几部分
      flags  功能标志位,扩展正则表达式的匹配
 返回值: 切割后的内容列表
"""
  • 使用compile对象
pattern = r'ab'
regex = re.compile(pattern)
rs = regex.split("abcdefabcd")
print(rs)  # ['', 'cdef', 'cd']
1.3 替换
  • 不使用compile对象
rs = re.sub(r'ab', "zzz", "abcdefabcd")
print(rs)  # zzzcdefzzzcd
rs = re.sub(r'ab', "zzz", "abcdefabcd", 1)
print(rs)  # zzzcdefabcd
"""
 re.sub(pattern,replace,string,count,flags = 0)
 功能: 使用一个字符串替换正则表达式匹配到的内容
 参数: pattern  正则表达式
      replace  替换的字符串
      string 目标字符串
      count  最多替换几处,默认替换全部
      flags  功能标志位,扩展正则表达式的匹配
 返回值: 替换后的字符串
"""

rs = re.subn(r'ab', "zzz", "abcdefabcd")
print(rs)  # ('zzzcdefzzzcd', 2)
rs = re.subn(r'ab', "zzz", "abcdefabcd", 1)
print(rs)  # ('zzzcdefabcd', 1)
"""
 re.subn(pattern,replace,string,count,flags = 0)
 功能: 使用一个字符串替换正则表达式匹配到的内容
 参数: pattern  正则表达式
      replace  替换的字符串
      string 目标字符串
      count  最多替换几处,默认替换全部
      flags  功能标志位,扩展正则表达式的匹配
 返回值: 替换后的字符串和替换了几处
"""
  • 使用compile对象
pattern = r'ab'
regex = re.compile(pattern)
rs = regex.sub("zzz", "abcdefabcd")
print(rs)  # zzzcdefzzzcd
rs = regex.sub("zzz", "abcdefabcd", 1)
print(rs)  # zzzcdefabcd

rs = regex.subn("zzz", "abcdefabcd")
print(rs)  # ('zzzcdefzzzcd', 2)
rs = regex.subn("zzz", "abcdefabcd", 1)
print(rs)  # ('zzzcdefabcd', 1)

2.match对象

finditer() fullmatch() match() search() 这4个方法返回的是match对象

m = re.search(r'ab', "abcdefabcd")
print(m)  # <re.Match object; span=(0, 2), match='ab'>
2.1 match对象的属性与方法
m = re.search(r"(ab)cd(?P<pig>ef)", 'zzabcdefghi')
# 属性变量
print(m)  # <re.Match object; span=(2, 8), match='abcdef'>
print(m.pos)  # 目标字符串开头索引  0
print(m.endpos)  # 目标字符串结尾索引  11
print(m.re)  # 正则表达式  re.compile('(ab)cd(?P<pig>ef)')
print(m.string)  # 目标字符串 zzabcdefghi
print(m.lastgroup)  # 最后一组组名  pig
print(m.lastindex)  # 最后一组序列号  2

# 属性方法
print(m.span())  # 匹配到的内容在目标字符串中的起止位置  (2, 8)
print(m.start())  # 获取匹配内容的开始位置  2
print(m.end())  # 获取匹配内容的结束位置  8
print(m.groupdict())  # 捕获组组名和对应匹配内容的字典  {'pig': 'ef'}
print(m.groups())  # 获取所有子组对应的内容  ('ab', 'ef')
print(m.group())  # 获取match对应内容  abcdef
print(m.group('pig'))  # ef
2.2 fullmatch()
"""
re.fullmatch(pattern,string,flags=0)
功能:从起始位置开始完全匹配某个目标字符串
参数:pattern 正则
	string  目标字符串
返回值:匹配内容match object
"""
rs = re.fullmatch(r'abcd', "abcdefg")
print(rs)  # None

rs = re.fullmatch(r'abcd', "abcd")
print(rs)  # <re.Match object; span=(0, 4), match='abcd'>
print(rs.group())  # abcd

rs = re.fullmatch(r'abcd', "zabcd")
print(rs)  # None
2.3 match()
"""
re.match(pattern,string,flags=0)
功能:从起始位置匹配某个目标字符串
参数:pattern 正则
	string  目标字符串
返回值:匹配内容match object
"""
rs = re.match(r'abcd', "abcdefg")
print(rs)  # <re.Match object; span=(0, 4), match='abcd'>
print(rs.group())  # abcd

rs = re.fullmatch(r'abcd', "zabcd")
print(rs)  # None
2.4 finditer()
"""
 功能: 匹配目标字符串内容所有符合的内容
 参数: pattern  正则表达式
      string 目标字符串
      flags  功能标志位,扩展正则表达式的匹配
 返回值: 匹配结果的迭代器
"""
rs = re.finditer(r'abcd', "zzzabcdzzzabcdzzzz")
for m in rs:
    print(m)
    print(m.group())
# <re.Match object; span=(3, 7), match='abcd'>
# abcd
# <re.Match object; span=(10, 14), match='abcd'>
# abcd
2.5 search()
"""
功能:匹配目标字符串第一个符合内容
参数:pattern 正则
	string  目标字符串
返回值:匹配内容match object
"""
rs = re.search(r'abcd', "zzzabcdzzzabcdzzzz")
print(rs)  # <re.Match object; span=(3, 7), match='abcd'>
print(rs.group())  # abcd

3.正则表达式分组

正则表达式中,以()内部为分组,()内部的()为子组

m = re.search(r"(ab)cd(?P<pig>ef)", 'abcdefgh')
print(m.group())  # abcdef
print(m.group(1))  # ab
print(m.group(2))  # ef
"""
group(index = 0)
返回对应分组序列匹配到的内容
默认index = 0 返回整个match对象内容
"""

print(m.group('pig'))  # ef
"""
group(group_name)
返回组名为group_name匹配到的内容
"""

print(m.groups())  # ('ab', 'ef')
"""
groups() 获取所有子组对应的内容
"""

4.贪婪模式和非贪婪模式

贪婪模式:就是尽可能多的匹配后面的内容

非贪婪模式:尽可能少的匹配后面的内容

pattern1 = r"(http://|https://).+(com|cn)"
pattern2 = r"(http://|https://).+?(com|cn)"

miter = re.finditer(pattern1, "http://www.aaa.com,https://www.bbb.cn")
for m in miter:
    print(m.group())
# http://www.aaa.com,https://www.bbb.cn


miter = re.finditer(pattern2, "http://www.aaa.com,https://www.bbb.cn")
for m in miter:
    print(m.group())
# http://www.aaa.com
# https://www.bbb.cn

在元字符后面加上? 就可以将贪婪模式转为非贪婪模式

5.flag参数

A == ASCII 元字符只能匹配ascii码

I == IGNORECASE 匹配忽略字母大小写

S == DOTALL 使 . 可以匹配换行

M == MULTILINE 使 ^ $可以匹配每一行的开头结尾位置

s = """Hello
张三
"""

# 只能匹配ascii编码
regex = re.compile(r'\w+', flags=re.A)
rs = regex.findall(s)
print(rs)  # ['Hello']
regex = re.compile(r'\w+')
rs = regex.findall(s)
print(rs)  # ['Hello', '张三']

# 忽略字母大小写
regex = re.compile(r'hello', flags=re.I)
rs = regex.findall(s)
print(rs)  # ['Hello']
regex = re.compile(r'hello')
rs = regex.findall(s)
print(rs)  # []

# . 可以匹配换行
regex = re.compile(r'.+', flags=re.S)
rs = regex.findall(s)
print(rs)  # ['Hello\n张三\n']
regex = re.compile(r'.+')
rs = regex.findall(s)
print(rs)  # ['Hello', '张三']

# ^ $可以匹配每行开头结尾
regex = re.compile(r'^张三', flags=re.M)
rs = regex.findall(s)
print(rs)  # ['张三']
regex = re.compile(r'^张三')
rs = regex.findall(s)
print(rs)  # []
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值