day14

正则表达式:

  • 正则表达式是使用一系列特殊符号中从字符串中匹配内容

  • 正则表达式是独立于所有语言的语法,所有语言中正则表达式的语法是相同的,只是使用方式不一样

匹配符号:

  • .(点) 通配符:可以匹配任意一个字符
  • \d:匹配0-9数字
  • \D:匹配非数字
  • 普通符号:在正则表达式中没有特殊含义的符号
  • \s:匹配空白符号(空格,\n,\t,\v等)
  • \S:匹配非空白字符
  • \w: 匹配数字、字母、下划线、中文、朝鲜语
  • [字符集]:从[]字符集中匹配一个字符
  • [^字符集]:匹配不在字符集中的元素
  • 字符集的规则没有变,必须在字符集的最开头添加,否则他就表示他自己了
常见的字符集:

1 [a-z]:表示匹配小写字母中的任意一个字母
2 [A-Z]:表示匹配大写字母中的任意一个字母
3 [0-9]:表示匹配0-9数字中的任意一个
4 [\u4e00-\u9fa5]:匹配任意一个汉字
5 [a-zA-Z]:表示匹配字母中的任意一个字母
6 [0-9a-zA-Z\u4e00-\u9fa5]:匹配任意一个汉字、字母、数字
7 [012345678-] 匹配0-8或者-其中的一个

# 1. .(点) 通配符:可以匹配任意一个字符

re_str = 'a.b'
# str1 = 'abc'
str1 = 'acb'
result1 = re.fullmatch(re_str, str1)
# print(result1)
# print(result1.span())

# 2. \d:匹配0-9数字
# 3. \D:匹配非数字
# re_str2 = 'a\d\dc'
re_str2 = 'a\D\Dc'
# str2 = 'a12c'
str2 = 'abcc'
result2 = re.fullmatch(re_str2, str2)
# print(result2)

# 4.普通符号:在正则表达式中没有特殊含义的符号

re_str = 'abcd'
str3 = 'abcd'
re.fullmatch(re_str, str3)

# 5. \s:匹配空白符号(空格,\n,\t,\v等)
# 6.  \S:匹配非空白字符

print(re.fullmatch(r'a\sb', 'a\nb'))
print(re.fullmatch(r'a\Sb', 'acb'))

# 7. \w: 匹配数字、字母、下划线、中文、朝鲜语
# 8. [字符集]:从[]字符集中匹配一个字符
# 字符集规则:-连接的是范围,-左边必须小于右边,-不能出现在字符集开头

print(re.fullmatch('[a-zA-Z][a-zA-Z]', 'az'))

# 9.[^字符集]:匹配不在字符集中的元素
# 字符集的规则没有变,必须在字符集的最开头添加,否则他就表示他自己了

print(re.fullmatch('[^a-zA-Z][a-zA-Z][a-z^A-Z]', '1z^'))

# findall(正则表达式,字符串):
# 1.从字符串中按照正则表达式的规则匹配所有可能,并放到列表中
# 2. 如果正则表达式中出现了分组,它只拿分组的内容

print(re.findall(r'\d', 'a1b3d45f6j7'))

正则中表示重复的符号:

  • ?:匹配0次或1次
  • +:匹配1次或多次
  • *:匹配任意次数
  • {m} 匹配m次
  • {m,n} 匹配m到n次
  • {m,} 匹配至少m次
  • {,m} 最多匹配m次
贪婪和非贪婪:
  • 默认所有次数不确定的匹配都是贪婪的
  • 非贪婪就是一次匹配取最短长度的结果,在非贪婪涉及的符号的基础上添加一个?即可,+?,*?,{m,n}?等

分组和分支:

  • 分支:|
分组:()
  • 能够将同类项提出来
  • 能够将分组中的结果重复
  • 如果字符串后面再次出现前面匹配过的结果,可以将前面的结果使用分组包围起来,
  • 结合\N(N是数字,代表第N个分组)的语法,可以将前面第N个分组的结果重复使用
  • 正则表达式不是转义字符,在写正则表达式时,在正则表达式前面添加r或者是R
import re

# 分支:|
# . 通配符放在[]中特殊意义消失
print(re.findall(r'[a-z]{3}', 'abcabd'))
print(re.findall(r'abc|abd', 'abcabd'))

# 分组:()
# 1.能够将同类项提出来
# 2. 能够将分组中的结果重复
print(re.findall(r'(abc|abd)', 'abcabd'))
# (ab(c|d))(abc)  (ab(c|d))-->第一个分组 (c|d)第二个分组  (abc)第3个分组

# 如果字符串后面再次出现前面匹配过的结果,可以将前面的结果使用分组包围起来,
# 结合\N(N是数字,代表第N个分组)的语法,可以将前面第N个分组的结果重复使用
print(re.fullmatch(r'(\d{4})(=)\2\1\1', '1234==12341234'))

# 正则表达式不是转义字符,在写正则表达式时,在正则表达式前面添加r或者是R

有关方法:fullmatch/findall/split/sub/search/match(常用:findall split sub)

  • fullmatch:查看整个字符串是否符合正则表达式 可能出现None
  • findall:
  • 从字符串中按照正则表达式的规则匹配所有可能,并放到列表中
  • 如果正则表达式中出现了分组,会先提取符合正则表达式的的结果,然后再拿分组的内容
  • split:按照正则表达式的规则切割字符串
  • sub:将符合正则表达式的字符串替换为新的字符串
  • search:查找字符串中第一个符合正则表达式的结果 可能出现None
  • match:查看字符串的开头是否符合正则表达式的规则 可能出现None
print(re.findall(r'[a-z]{3}', 'abcabd'))
print(re.findall(r'abc|abd', 'abcabd'))
print(re.match(r'a', 'a,b.c'))

print(re.search(r'[a-z]', 'a,b.c'))

print(re.split(r'[,.]', 'a,b.c'))

print(re.sub(r'[,.]', '', 'a,b.c'))
a', 'a,b.c'))

print(re.search(r'[a-z]', 'a,b.c'))

print(re.split(r'[,.]', 'a,b.c'))

print(re.sub(r'[,.]', '', 'a,b.c'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值