Python学习笔记---结构化文件存储:正则

#正则表达式(RegularExpression, re)
  • - 是一个计算机科学的概念
  • - 用于使用单个字符串来描述,匹配符合某个规则的字符串
  • - 常常用来检索,替换某些模式的文本


#正则的写法
  • - .(点):表示任意一个字符,出\n,比如查找所有的一个字符\.
  • - []:匹配中括号中列举的任意字符,比如[L,Y,0],LLY, Y0, LI
  • - \d:任意一个数字
  • - \D:除了数字都可以
  • - \s:表示空格,tab键
  • - \S:除了空白符号
  • - \w:单词字符,就是a-z, A-Z, 0-9, _
  • - \W: 除了
  • - *: 表示前面内容重复零次或者多次, \w
  • - +: 表示前面内容至少出现一次
  • - ?: 前面才出现的内容零次或者一次
  • - {m,n}:允许前面内容出现最少m次,最多n次
  • - ^:匹配字符串的开始
  • - $:匹配字符串的结尾
  • - \b:匹配单词的边界
  • - ():对正则表达式内容进行分组, 从第一个括号开始,编号逐渐增大


  •   验证一个数字: ^\d$
  •   必须有一个数字,最少一位:^\d+$
  •   只能出现数字,且位数为5-10位: ^\d{5,10}$
  •   注册者输入年龄,要求16岁以上,99岁以下: ^[16-99]$
  •   只能输入英文字符和数字: ^[A-Za-z0-9]$
  •   验证qq号码: [0-9]{5,12}


  • - \A: 只匹配字符串开头, \Aabcd, 则abcd
  • - \Z: 仅匹配字符串末尾, abcd\Z, abcd
  • - |: 左右任意一个
  • - (?P...): 分组,除了原来的编号再制定一个别名, (?P12345){2}, 1234512345
  • - (?P=name): 引用分组,

#RE使用大致步骤

1.使用compile将表示正则的字符串编译为一个pattern对象

2.通过pattern对象提供一系列方法对文本进行查找匹配,获得匹配结果,一个Match对象

3.最后使用Match对象提供的属性和方法获得信息,根据需要进行操作



#RE常用函数

  1. - group():获得一个或者多个分组匹配的字符串,当要获得整个匹配字符串时,直接使用group或者group(0)
  2. - start:获取分组匹配的字串在整个字符串中的真实位置,参数默认为0
  3. - end:获取分组匹配的字串在整个字符串中的结束位置,参数默认为0
  4. - span:返回的结构技术(start(group), end(group))


案例re1.py

# 导入相关包
import re
# 超找数字
# r表示字符串不转义
p = re.compile(r'\d+')
# 在字符串"one12towthree33456four78"中进行查找,按照规则p制定的正则进行查找
# 返回None表示没有找到结果,否则会返回match对象
# 参数3,6表示在字符串中查找的返回
m = p.match("one12towthree33456four78", 3, 6)
print(m)
print(m[0])

# 上述代码说明两个问题
# 1.match可以输入阐述表示起止位置
# 2.查找的结果只包含一个,表示第一次进行匹配成功的内容

案例re2.py

import re

# I 表示忽略掉大小写

p = re.compile(r'([a-z]+) ([a-z]+)', re.I)
m = p.match("I am really love liuyifei")
print(m)
print(m.group(2))
print(m.start(2))
print(m.end(2))
print(m.groups())
# 查找
  • - search(str, [,pos[, endpos]]):在字符串中查找匹配,pos和endpos表示起始位置
  • - findall:查找所有
  • - finditer:查找,返回一个iter结果


案例re3.py

import re
p = re.compile(r'\d+')
m = p.search("one12towthree33456four78")
print(m.group(0))

rst = p.findall("one12towthree33456four78")
print(type(rst))
print(rst)
# sub替换

- sub(repl, str[, count])

案例re4.py

import re
p = re.compile(r'(\w+) (\w+)')
s = "hello hi liu 456 yifei, I love you!"
rst = p.sub(r'Hello world', s)
print(rst)
# 匹配中文
- 大部分中文内容表示范围是[u4e00-u9fa5], 不包括全角标点

案例re5.py

import re
title = u'世界 你好,hello world'
p = re.compile(r'[\u4e00-\u9fa5]+')
rst = p.findall(title)
print(rst)
# 贪婪和非贪婪
  1. - 贪婪:尽可能多的匹配,(*)表示贪婪匹配
  2. - 非贪婪:找到符合条件的最小内容即可,(?)表示非贪婪
  3. - 正则默认使用贪婪匹配

案例re6.py

import re
title = u'<div>name</div><div>age</div>'
p1 = re.compile(r'<div>.*</div>')
p2 = re.compile(r'<div>.*?</div>')
m1 = p1.search(title)
print(m1.group())
m2 = p2.search(title)
print(m2.group())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值