正则表达式的回顾

正则表达式的两种应用场景:
a. 判断用户的输入是否符合规范
b. 爬虫数据的提取

re.match(正则表达式,需要处理的字符串)

In [18]: re.match(r"hello",“helloworld”)
Out[18]: <_sre.SRE_Match object; span=(0, 5), match=‘hello’>

In [19]: re.match(r"hello",“Helloworld”) # 没有返回值,表示没有匹配到内容

In [20]: re.match(r"[hH]ello",“Helloworld”)
Out[20]: <_sre.SRE_Match object; span=(0, 5), match=‘Hello’>

匹配单个字符:
\d 0-9
\s 空白字符
\w 0-9 a-z A-Z _ 语言
. 匹配任意字符,除了换行符\n

匹配多个字符:
{}
+
*

eg: 匹配电话号码
In [26]: re.match(r"\d{3}-?\d{8}|\d{4}-?\d{7}",“02145617895”).group()
Out[26]: ‘02145617895’

In [27]: re.match(r"\d{3}-?\d{8}|\d{4}-?\d{7}",“0214-5617895”).group()
Out[27]: ‘0214-5617895’

eg: . 特殊符号的使用
In [33]: re.match(".*",html_str,re.S).group()
Out[33]: ‘sdsdsaa\ndsadsa\nd\nsad\nadsas\ndgfsgsadf\n\ndfs\nasdfdas’

练习1: 匹配变量名是否符合标准规范
“”"
match 默认从开头开始判断,且只匹配第一个匹配到的字符串
match 不判断结尾,即不能保证后面的部分是否以…结尾
\w 匹配的是 a-z A-Z 0-9 _ 语言
从头到尾判断 : ^ 开头 $ 结尾
“”"
import re

names = [‘name1’, ‘_name’, ‘2_name’, ‘name’, “h3###hello”,“a!!hei”]

def main():
for name in names:
# ret = re.match("[a-zA-Z_]+\w*",name)
ret = re.match(r"1[a-zA-Z0-9_]*$", name)
if ret:
print(name," ---- " ,ret.group())
else:
continue

if name == ‘main’:
main()

练习2: 匹配邮箱地址

练习3: 分组练习 + \1 的结合使用
In [49]: html_str
Out[49]: ‘

sahdisuahdiahd adf\n收发

In [50]: re.match(r"<(\w*)><(\w*)>(.*?)</\2></\1>",html_str, re.S).group()
Out[50]: ‘

sahdisuahdiahd adf\n收发

In [51]: re.match(r"<(\w*)><(\w*)>(.*?)</\2></\1>",html_str, re.S).group(1)
Out[51]: ‘body’

In [52]: re.match(r"<(\w*)><(\w*)>(.*?)</\2></\1>",html_str, re.S).group(2)
Out[52]: ‘h1’

In [53]: re.match(r"<(\w*)><(\w*)>(.*?)</\2></\1>",html_str, re.S).group(3)
Out[53]: ‘sahdisuahdiahd adf\n收发’

In [55]: re.match(r"<(\w*)><(\w*)>(.*?)</\2></\1>",html_str, re.S).groups()
Out[55]: (‘body’, ‘h1’, ‘sahdisuahdiahd adf\n收发’)

re模块的高级用法

  1. re.search(r"^…",str) # 等价于 re.match()
  2. re.sub(正则,替换的字符串,字符串) 默认“全部替换”
    注:re.sub 中间的参数可以是 —函数—
  3. re.findall() 返回所有匹配到的所有内容 —列表或者–列表嵌套元组
  4. re.split(r"? ", “info:xiaozhang 33 shanghai”)

练习:re.sub
#coding=utf-8
import re

def add(temp):
strNum = temp.group()
num = int(strNum) + 1
return str(num)

ret = re.sub(r"\d+", add, “python = 997”)
print(ret)

ret = re.sub(r"\d+", add, “python = 99”)
print(ret)


  1. a-zA-Z_ ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值