Python3的re模块的使用

import re

# 2元字符 . ^ $ * + ? { } [ ] | ( ) \
# 作用:匹配字符串

s = 'hello world'
# 返回开始位置 下标
print(s.find('llo'))

# 找到 并替换
print(s.replace('ll', 'xx'))

# . 代指一位字符,代指所有字符 除了换行符 \n
ci = re.findall('w\w{2}l', 'hello world')
print(ci)

# ^ 只会在开始时进行匹配
ci = re.findall('^h..l', 'hello world')
print(ci)

# $ 只会在最后时进行匹配
ci = re.findall('o..d$', 'hello world')
print(ci)

# * 重复匹配 从h开始到o(最后一个)中间可以任意字符
ci = re.findall('h.*o', 'hello world')
print(ci)

# + 至少需要一个 只对前面第一个字符有作用
ci = re.findall('a+b', 'aaaaabcccdddabbbbb')
print(ci)

# ? 只能取0或1次 只对前面第一个字符有作用 出现a 0次或1次
ci = re.findall('a?b', 'abcdbb,acb,addb')
print(ci)

# {n}  出现n次 只对前面第一个字符有作用
ci = re.findall('a{2}b', 'abcdbb,acb,aabddb')
print(ci)

# +等价于 {1,正无穷} 也等价于 {1, }
# * 等价于 {0,正无穷}    ? 等价于{0,1}
# {m,n}  出现m到n次 只对前面第一个字符有作用
ci = re.findall('a{1,3}b', 'abcdbb,acb,aabddb')
print(ci)

# x[m,n]y 字符集 或的关系 xmy或 xny
ci = re.findall('a[c,d]b', 'abcdbb,acb,aabddb')
print(ci)

# [] 取消元字符的特殊功能 (三个例外:\,^,-)
ci = re.findall('[w,,,*]', 'abwdbb,,acb,aa*ddb')
print(ci)

ci = re.findall('[1-9,a-z,A-Z]', '12asAS')
print(ci)

# [^] 就变成了 取反操作
ci = re.findall('[^(a-z)]', '12aimsAS')
print(ci)

# ^ 是取[] 内的所有非
ci = re.findall('[^12,3,4]', '1234567891')
print(ci)

# \ 反斜杠
# \ 1.反斜杠后边跟元字符去除特殊功能 2.反斜杠后边跟普通字符实现特殊功能
# \w	匹配 数字 字母 下划线
# \W	匹配 非数字 非字母 非下划线
# \s	匹配 任意空白字符,等价于 [\t\n\r\f]。
# \S	匹配 任意非空字符
# \d	匹配 任意数字,等价于 [0-9]。
# \D	匹配 任意非数字
# \b	匹配一个单词边界,也就是指单词和空格间的位置。

ci = re.findall('\w', '19 az__')
print(ci)
ci = re.findall('\W', '19 az__')
print(ci)
ci = re.findall('\s', '19 az__')
print(ci)
ci = re.findall('\S', '19 az__')
print(ci)
ci = re.findall('\d', '19 az__')
print(ci)
ci = re.findall('\D', '19 az__')
print(ci)
ci = re.findall(r'er\b', '19 er az__over ')
print(ci)

# 符合的第一个结果
print(re.search('as', 'hgahashjjas'))

# 想要匹配 \ 没找到 加r 表示匹配原生字符 不进行转义
print(re.findall(r'\\', 'adhfD\c'))

print(re.findall(r'\\', 'adhfD\c'))

# | 是或的意思 会先取第一个匹配结果
print(re.search('(as)+', 'adsdasas').group())
print(re.search('(as)|3', 'as3').group())

# ?P<name> 固定格式 给分组起一个名字 为name 规则为:\d{3}
name = re.search('(?P<id>\d{3})', 'wwwwddash34ttt123/ooo')
print(name.group('id'))
# 连续分成两个组 分别起名 匹配规则内的 / 也是匹配规则
name = re.search('(?P<num>\d{3})/(?P<letter>\w{3})', 'wwwwddash34ttt123/abc')
print(name.group())
print(name.group('num'))
print(name.group('letter'))

# 正则表达式的方法
# 1. findall():所有结果都返回到一个列表里
# 2. search():返回一个对象(object),对象可以调用group()返回结果
# 3. match():只在字符串开始匹配,也返回匹配到的第一个对象,对象可以调用group()
# 4. split() 如果在边缘 则会有空字符
print(re.split('k', 'ashdjakah'))
print(re.split('[h,k]', 'ashdjakah'))
# 5. sub() 替换函数,使用方式参看下面
print(re.sub('j..', 's..b', 'hello joe world'))
# 6. compile() # 记为一个正则表达式 下次可以直接使用
obj = re.compile('\.com')
print(obj.findall('ahfjhj.com'))

要点:

  •  find() 返回第一个匹配位置下标
  • replace() 找到 并替换
  • 2元字符 . ^ $ * + ? { } [ ] | ( ) \
  • . 代指一个字符,除了换行符\n 以外的其他所有字符
  • ^ 只会在开始位置进行匹配
  • $ 只会在末尾位置进行匹配
  • * 可重复匹配多个字符:h.*o  可以匹配到hello
  • + 至少匹配到一个: a+b 可以匹配到 aaaab 或 ab
  • ? 只能匹配到0个或1个: a?b 可以匹配到 b 或 ab
  • {n} 匹配到n次:a{3}b 可以匹配到 aaab
  • 小结:1. + 等价 {1,正无穷};2. * 等价 {0,正无穷};3. ?等价{0,1} 
  • 字符集[ ],括号内是或的关系:a[m,n]b 可以匹配到 amb 或 anb
  • [ ]  还有取消元字符的特殊功能(三个例外:\ , ^ , -)
  • [^] 取反操作:[^(a-z)] 表示匹配除了小写字母以外的所有字符
  • \ 反斜杠:\w 匹配数字,字母下划线 。\W 匹配非数字,非字母。非下划线。\s 匹配任意空白字符 等价[\t \n \r \f]。 \S匹配任意非空字符。\d 匹配任意数字,等价[0-9]。\D 匹配非数字。 \b 匹配单词边界:er\b 可以匹配‘19 er az_over’ 中的 一个'er'。
  • \ 如果想匹配反斜杠 \ 就在前面加 r  表示不进行转义:r'\\' 可以匹配到 \ 
  • | 表示或的意思,但是如果第一个匹配,就匹配第一个,不在匹配第二个: '(as)|3' 匹配 ‘as3’ 匹配到as  而不会是3。
  • ?P<name>fmt/?P<name>fmt/?P<name>fmt ... 用/ 分隔开 ?P<name>fmt 中的name是别名,fmt 是匹配规则。可以通过group('name') 获取到匹配结果。
  • findall() 所有结果返回到一个列表
  • search() 返回一个对象,可以调用group()返回结果
  • match() 在字符串开始匹配,返回匹配的第一个对象,可以调用group()返回结果
  • split(‘w’,'awawaw')  以 w 分开awawaw。如果w在边缘,则会有空字符串 '空' 。
  • sub(‘w’,'a','awawaw')  表示以w替换a,最后字符串变成,wwwwww
  • compile() 记为一个匹配规则。my_re=compile('\.com') ,匹配'.com' 记为my_re。my_re.findall('www.baidu.com') 返回.com

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值