复习前面知识三

关于JSON的使用:JSON是一种轻量级的数据交换格式。

  • dumpsdump的使用方式:
import json

# dumps可以格式化所有的基本数据类型为字符串
data1 = json.dumps(["age", "year", "77"])  # 将列表格式化为字符串
print(data1, type(data1))
data2 = json.dumps(2)
print(data2, type(data2))  # 将数字格式化为字符串
data3 = json.dumps('3')  # 字符串
print(data3, type(data3))
dict = {"name": "Tom", "age": 23, "学校": "caogengdaxue"}
data4 = json.dumps(dict)  # JSON模块序列化字典,而且会把中文转码为Unicode编码
print(data4, type(data4))
# dump的使用
date5 = {
    "name": "小明",
    "age": 18,
    "gender": "男"
}
with open("date5.json", "w") as f:
    json.dump(date5, f)  # json.dump可以直接用写入文件对象
  

输出为:
[“age”, “year”, “77”] <class ‘str’>
2 <class ‘str’>
“3” <class ‘str’>
{“name”: “Tom”, “age”: 23, “\u5b66\u6821”: “caogengdaxue”} <class ‘str’>
json文件内容为:{“name”: “\u5c0f\u660e”, “age”: 18, “gender”: “\u7537”}

  • load和loads的使用方式:
# load和loads反序列化方法,将json格式数据解码为python对象。
import json

f = open("date5.json", "r")
data = f.read()
date5 = json.loads(data)  # 从文件对象反序列化
f.close()
print(date5, type(date5))

with open("date5.json", "r") as f:
    date5 = json.load(f)  # 直接从文件对象反序列化
    print(date5, type(date5))

输出为:
{‘name’: ‘小明’, ‘age’: 18, ‘gender’: ‘男’} <class ‘dict’>
{‘name’: ‘小明’, ‘age’: 18, ‘gender’: ‘男’} <class ‘dict’>

正则表达式

一、正则表达式函数

1.findall()函数:返回你要查询的所有匹配项,若找不到匹配项就返回一个空列表
import re

txt = "xxxx"
x = re.findall("xx", txt)
print(x)
# 输出为
['xx', 'xx']
x1 = re.findall('xxxxx', txt)  # 找不到返回一个空列表
print(x1)
# 输出为
[]
2.search()函数:返回匹配项的位置;若有多个匹配项,则只返回第一次出现匹配项,不会返回所有匹配的项;若未找到匹配项则返回None
        import re
        
		txt = "菜鸟 呢"
		x = re.search("\s", txt)  # \s返回字符串中包含的空格(\S非空格)
		print("第一个空格字符位于位置:", x.start()) 
		# 输出为
		第一个空格字符位于位置: 2
3.split()函数:返回一个列表,并且字符串每次匹配时被拆分

例如:在每个空格处把字符拆分

import re

txt = "菜鸟 学 python"
x = re.split("\s", txt)  # 匹配所有空格
print(x)
# 输出为
['菜鸟', '学', 'python']
# 通过指定maxsplit参数来控制你所查询出现的次数
txt = "xx xx xx"
x = re.split("\s", txt, 1)  # maxsplit=1
print(x)
# 输出为
['xx', 'xx xx']
4.sub()函数:把你选择的文本替换你所需要的文本;可以用count参数来控制替换次数
import re
	
txt = "学python就就就川川菜鸟"
x = re.sub("就", "只", txt, 2)  # 替换次数count=2,“就”为选择文本,“只”为替换文本
print(x)
# 输出为
学python只只就川川菜鸟
5.compile()函数:用于编译正则表达式,从而生成一个Pattern对象。
import re
Pattern = re.compile(r'\w+')
6.match()函数:用于查找字符串指定位置(不指定的默认匹配整个字符串)正则表达式。同样的它只匹配一次,不会返回所有匹配结果。
import re
txt = re.match(r'\w+', 'one123')  # r'XXX"是把里面内容XXX转化为字符
print(txt)  # 直接匹配整个字符串
txt1 = re.match(r'[a-z]+', 'Abcde', re.I)  # re.I忽略大小写模式
print(txt1)
#输出为
<re.Match object; span=(0, 6), match='one123'>
<re.Match object; span=(0, 5), match='Abcde'>

二、元字符

1.列表符号:[]用于查找一组字符

例如:按字母顺序查找

txt = "apple chuanchuan "
x = re.findall("[a-m]", txt)#按照字母顺序查找“a”到“m”之间的所有小写字符
2.转义符:** 表示特殊序列

例如:匹配所有数字

txt = "我今年20岁了"
x = re.findall("\d", txt)#查找所有数字字符(\d返回字符串中的数字)
3.任意符号:可以是任何字符,换行符除外

例如:查找一个以“he”开头,中间任意两个字符,结尾为“o”

txt = "hello world"
#搜索以“he”开头、后跟两个(任意)字符和一个“o”的序列
x = re.findall("he..o", txt)
4.开始符:^符号用于字符串匹配开始,表示首次匹配出现就结束,并且整个字符串必须以字母为开头

例如:

txt = "川川菜鸟 飞起来了"
x = re.findall("^川", txt)#“^川”表首次出现“川”就结束查询
5.结束符:$ 符号用于匹配结尾,并且整个字符串要以字母为结尾。

例如:查询字符串是否以“world”结尾

txt = "hello world"
#匹配字符串是否以“world”结尾	
x = re.findall("world$", txt)
6.星号符:*符号用于查找“零次”或者“多次”出现在字符串中

例如:

txt = "天上飞的是菜鸟,学python找川川菜鸟!"
#检查字符串中“xx”后跟 0 个或多个“x”字符:
x = re.findall("菜鸟*", txt)#字符串中后跟“菜鸟*”查询到多少个就输出多少个
#若查询字符串无关字符则输出['', '', '', '', '', '', '', '']
7.加号符:+符号用于查找“一个”或“多个”出现在字符串中

例如:

txt = "飞起来了,菜鸟们!"
#检查字符串是否包含“菜鸟”后跟 1 个或多个“菜鸟”字符:
x = re.findall("菜鸟+", txt)#字符串中后跟“菜鸟+”查询到多少个就输出多少个
#若查询字符串中无关字符则输出[]
8.集合符号:{n}指定字符串中某字符出现n次

例如:

txt = "川川菜鸟并不菜!"
#检查字符串是否包含“川”两个
x = re.findall("川{2}", txt)  # “川{2}”指定在字符串中川出现了n=2次
9限定符号:{n,}表示至少匹配上一元素n次,其中n为任何整数。

import re

txt = “川川菜鸟并不菜!” x = re.findall(“川{1,}”, txt) #“川{1,}”指定在字符串中川至少出现了n=1次
print(x)

10限定符号:{n,m}表示至少匹配一元素n次,至多m次,其中n,m是整数。

import re

txt = “川川菜鸟并不菜!” x = re.findall(“川{1, 2}”, txt) # “川{1,2}”指定在字符串中川至少出现了n=1次,至多n=2次
print(x)

11.或符号:x|y查询条件x和y两选一

例如:

import re

txt = "菜鸟们学会python了吗?串串也是菜鸟啊!"
#匹配字符串出现“菜鸟”或者“是我了”
x = re.findall("菜鸟|是我了", txt)#查询到条件后,字符出现多少次就输出多少次
print(x)
if x:
  print("匹配到了哦!")
else:
  print("匹配失败")

三、特殊元字符

包含以下:
指定字符:\A 如果指定的字符位于字符串的开头,则返回匹配项。

指定开头结尾:\b 返回指定字符位于单词开头或结尾的匹配项 ,即单词和空格之间的位置(r'\b'开头的“r”确保字符串被视为原始字符串)。

匹配中间字符:\B 返回存在指定字符但不在单词开头(或结尾)的匹配项 (r'\B'开头的“r”确保字符串被视为“原始字符串”)。

匹配数字:\d 返回字符串包含数字(0-9 之间的数字)的。

匹配非数字:\D 返回字符串不包含数字的匹配项

空格匹配:\s 返回一个匹配字符串包含空白空间字符的匹配项。

匹配非空格:\S 返回字符串不包含空白字符的匹配项

匹配任意数字和字母:\w 返回一个匹配,其中字符串包含任何单词字符(从 a 到 Z 的字符,从 0 到 9 的数字,以及下划线 _ 字符)

匹配任意非数字和字母:\W 返回字符串不包含任何单词字符的匹配项,在每个非单词字符中返回匹配(不在A和Z之间的字符。“!”,“?”空白位等)

匹配结尾:\Z 或 \z 如果指定的字符位于字符串的末尾,则返回匹配项。
例如:
import re

txt = "菜鸟在这里, 现在属于21世纪"

# 指定字符
x = re.findall("\A菜", txt)  # 匹配以“菜”字开头的字符

# 指定开头结尾
x = re.findall(r"\b菜", txt)  # 匹配"菜"为开头
x = re.findall(r"里\b", txt)  # 匹配“里”为结尾

# 匹配中间字符
x = re.findall(r"\B在", txt)  # 查询是否存在“xx”,但是不在字符串开头
x = re.findall(r"里\B", txt)  # 查询中间字符,如果你匹配结尾”里“就会返回空

# 匹配数字
x = re.findall("\d", txt)  # 检查字符串是否包含任何位数(0-9的数字)

# 匹配非数字
x = re.findall("\D", txt)  # 匹配任何非数字的字符

# 空格匹配
x = re.findall("\s", txt)  # 匹配任何空格字符

# 非空格匹配
x = re.findall("\S", txt)  # 匹配任任意非空字符

# 匹配任意数字和字母
x = re.findall("\w", txt)  # 在每个单词字符(从a到z的字符,0-9的数字)返回匹配项,以及下划线_字符

# 匹配任意非数字和字母
x = re.findall("\W", txt)  # 在每个非单词字符中返回匹配项(“!”,“,”,“?”空白位等)

# 匹配结尾
x = re.findall("纪\Z", txt)  # 匹配结尾项“xx”

print(x)

if x:
    print("是的匹配到了")
else:
    print("匹配不到")

四、集合

1.指定字符范围匹配

例如:

txt = "The rain in Spain"

x = re.findall("[arn]", txt)#集合“[arn]”所有出现该字符都打印一遍

print(x)
2.匹配任意范围内小写字母

例如:

txt = "hello wo r l d"
#返回任何小写字符的匹配项,按字母顺序在a-n之间排序输出
x = re.findall("[a-n]", txt)
3.其它:
[^arn] 返回除 a、r 和 n 之外的任何字符的匹配项

[0123] 返回存在任何指定数字(0、1、2 或 3)的匹配项

[0-9] 返回 0 到 9 之间任意数字的匹配项

[0-5][0-9] 返回 00 到 59 中任意两位数的匹配项

[a-zA-Z] 按字母顺序返回 a 和 z 之间的任何字符的匹配,小写或大写

[+] 在集合中,+, *, ., |, (), $,{} 没有特殊含义,所以 [+] 的意思是:返回字符串中任意 + 字符的匹配项

例如:

import re

txt = "hello wo r l d"
txt1 = "78,9,22,15,9,91,2,35"

# x = re.findall("[^ell]", txt)#返回匹配项之外的所有字符
# x = re.findall("[012]", txt1)#返回找到的匹配项
# x = re.findall("[0-9]", txt1)#返回0到9任意数字的匹配项
# x = re.findall("[0-5][0-9]", txt1)#返回00到59的任意两位的数字
# x = re.findall("[a-zA-Z]", txt)#返回a到z的小写或大写的匹配项
# x = re.findall("[+]", txt)#只能查询带有+的字符串,否则输出【】

print(x)

if x:
  print("匹配到了!")
else:
  print("匹配不到")

五、匹配对象

Match对象能检索有关搜索和结果的信息的属性以及方法,包含以下函数:
span()返回一个包含匹配开始和结束位置的元组。
string返回传递给函数的字符串
group()返回字符串中匹配的部分
例如:
1.span()函数
import re

# 搜索单词开头的大写“S”字符,并打印其位置

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)  # 打印第一匹配项的开始位置和结束位置
# x = re.findall("\w()", txt)#/w+输出无空字符串,/w*输出有空字符串
# print(x)
print(x.span())
# 输出为
(12, 17)
2.string函数
import re

# 搜索满足条件的字符串并返回字符串

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)
# 输出为
The rain in Spain
3.group()函数
import re

# 搜索单词开头的小写“w”字符,并打印该单词:

txt = "hello world"
x = re.search(r"\bw\w+", txt)
print(x.group())
# 输出为
world
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白只对大佬的文章感兴趣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值