八、正则表达式与JSON
一、正则表达式
1.匹配方式
1.1.字符集
字符集——findall方法
re.findall('Python',a)——
使用findall方法,查找字符串中是否包含Python
re.findall('\d',a)——
使用元字符,正则表达式查找数字【0-9】
re.findall('\D',a)——
使用元字符,正则表达式非数字
print('查找中间字符包含c或者f的单词:',re.findall('a[cf]c',s))
print('查找中间字符包含不是c或者f的单词:',re.findall('a[^cf]c',s))
print('查找中间字符包含c-f的单词:',re.findall('a[c-f]c',s))
import math
import rea = 'C234|C++78|C#|Java5|Python890|Javascript'# # 查找字符串中是否包含Python
# print(a.index('Python')> -1)
# print('Python' in a)# 使用findall方法,查找字符串中是否包含Python
r = re.findall('Python',a)
# 使用元字符,正则表达式查找数字【0-9】
d = re.findall('\d',a)
# 使用元字符,正则表达式非数字
e = re.findall('\D',a)
print(r)
print('查找数字:',d)
print('查找非数字:',e)
if len(r) > 0:print('字符串中包含Python')
else:print('不包含Python')s = 'aac,abc,acc,adc,aec,afc,ahc'
print('查找中间字符包含c或者f的单词:',re.findall('a[cf]c',s))
print('查找中间字符包含不是c或者f的单词:',re.findall('a[^cf]c',s))
print('查找中间字符包含c-f的单词:',re.findall('a[c-f]c',s))
结果
['Python']
查找数字: ['2', '3', '4', '7', '8', '5', '8', '9', '0']
查找非数字: ['C', '|', 'C', '+', '+', '|', 'C', '#', '|', 'J', 'a', 'v', 'a', '|', 'P', 'y', 't', 'h', 'o', 'n', '|', 'J', 'a', 'v', 'a', 's', 'c', 'r', 'i', 'p', 't']
字符串中包含Python
查找中间字符包含c或者f的单词: ['acc', 'afc']
查找中间字符包含不是c或者f的单词: ['aac', 'abc', 'adc', 'aec', 'ahc']
查找中间字符包含c-f的单词: ['acc', 'adc', 'aec', 'afc']
1.2.概括字符集
re.findall('\w',a)——
匹配单词字符,包含0-9、A-Z、a-z、_
re.findall('\W',a)——
匹配非单词字符,包含空格、特殊字符、转义字符
re.findall('\s',a)——
匹配空白字符,转义字符、空格
re.findall('\S',a)——
匹配非空白字符
import rea = 'python 11\t11java&678p\nh\rp'# 匹配单词字符,包含0-9、A-Z、a-z、_
print(re.findall('\w',a))# 匹配非单词字符,包含空格、特殊字符、转义字符
print(re.findall('\W',a))
# 匹配空白字符,转义字符、空格
print(re.findall('\s',a))
# 匹配非空白字符
print(re.findall('\S',a))
结果
['p', 'y', 't', 'h', 'o', 'n', '1', '1', '1', '1', 'j', 'a', 'v', 'a', '6', '7', '8', 'p', 'h', 'p']
[' ', '\t', '&', '\n', '\r']
[' ', '\t', '\n', '\r']
['p', 'y', 't', 'h', 'o', 'n', '1', '1', '1', '1', 'j', 'a', 'v', 'a', '&', '6', '7', '8', 'p', 'h', 'p']
1.3.数量词
贪婪取值
re.findall('[a-z]{3,6}',s——
取值a-z,位数最小为3,最大为6,贪婪取值
非贪婪取值
re.findall('[a-z]{3,6}?',s)——
取值a-z,位数最小为3,最大为6,加上?为非贪婪取值
re.findall('python*',s)——
*匹配字符前面0次或者无限次数
re.findall('python+',s)——
+匹配字符前面1次或者无限次数
re.findall('python?',s)——
?匹配字符前面0次或者1次
s = 'pytho0python 11\t11java&678p\nh\rppythonn'
# 取值a-z,位数最小为3,最大为6,贪婪取值
print(re.findall('[a-z]{3,6}',s))
# 取值a-z,位数最小为3,最大为6,加上?为非贪婪取值
print(re.findall('[a-z]{3,6}?',s))
# *匹配字符前面0次或者无限次数
print(re.findall('python*',s))
# +匹配字符前面1次或者无限次数
print(re.findall('python+',s))
# ?匹配字符前面0次或者1次
print(re.findall('python?',s))
结果
['pytho', 'python', 'java', 'ppytho']
['pyt', 'pyt', 'hon', 'jav', 'ppy', 'tho']
['pytho', 'python', 'pythonn']
['python', 'pythonn']
['pytho', 'python', 'python']
1.4.边界匹配
边界匹配——findall方法
import re
qq = '2343432444'
# 匹配最少3位、最多8位的数字,$表示从最尾部配置,结果为[43432444]
print(re.findall('\d{3,8}$',qq))
# 匹配最少3位、最多8位的数字,^表示从最前面配置,结果为[23434324]
print(re.findall('^\d{3,8}',qq))
# 匹配最少3位、最多8位的数字,前后都配置,结果为[]
print(re.findall('^\d{3,8}$',qq))
结果
['43432444']
['23434324']
[]
1.5.组
language = 'pythonpythonpythonJSJS67'
# 判断数组中,是否包含3个python
print(re.findall('(python){3}',language))
# 判断数组中,是否包含3个python,2个JS
print(re.findall('(python){3}(JS){2}',language))
结果
['python']
[('python', 'JS')]
1.6.匹配模式参数
language01 = 'PythonC#\nJavaPHP'
# 匹配c#和换行符,re.I模式代表不区分大小写,.代表配置除换行符以外左右的字符。
# re.S模式相当于将.反过来,配置换行符\n
print (re.findall('c#.{1}',language01,re.I | re.S))
结果
['C#\n']
2.正则替换
2.1.使用replace方法替换,将C#替换成GO
lanuage = 'PythonC#JavaC#PHPC#'
# replace方法替换,将C#替换成GO
print(lanuage.replace('C#','GO'))
结果
PythonGOJavaGOPHPGO
2.2.使用sub方法替换,增加替换次数
lanuage = 'PythonC#JavaC#PHPC#'
# replace方法替换,将C#替换成GO
print(lanuage.replace('C#','GO'))
# sub方法替换,将C#替换成GO,2代表替换次数,如写成0,不限制替换次数
print(re.sub('C#','GO',lanuage,2))
结果
PythonGOJavaGOPHPGO
PythonGOJavaGOPHPC#
2.3.使用sub方法,将函数作为参数,替换字符
事例1
import re
lanuage = 'PythonC#JavaC#PHPC#'
# 定义一个函数,return一个替换的字符串
# sub方法调用函数时,ab传入的是一个对象
def replace01(ab):print(ab)# 通过group方法,拿到匹配的值return '!!'+ab.group()+'!!'
# 将函数返回值,作为一个替换后的值
print(re.sub('C#',replace01,lanuage))
结果
<re.Match object; span=(6, 8), match='C#'>
<re.Match object; span=(12, 14), match='C#'>
<re.Match object; span=(17, 19), match='C#'>
Python!!C#!!Java!!C#!!PHP!!C#!!
事例2
s = 'A8C3721D86'
def convert(ac):matched = ac.group()if int(matched) >= 6:return '9'else:return '0'
r = re.sub('\d',convert,s)
print(r)
结果
A9C0900D99
3.search与match函数匹配
match、search只匹配一次,findall匹配多次
# match、search与findall最大的区别在于
# match、search只匹配一次,findall匹配多次
s = '683C72D8E67'
# 从第一个字符匹配,如匹配到返回对象,未匹配到返回None
r = re.match('\d',s)
# 查找匹配字符下标位置
print(r.span())
# 从第一个字符匹配,继续往下匹配
rc = re.search('\d',s)
print(rc.group())
结果
(0, 1)
6
4.正则表达式,group分组
a = 'life is short,i use python'
# 使用guoup,取出所有字符串,group参数默认为0
x = re.search('life.*python',a)
print(x.group())
# 使用guoup,取出小括号中分组的字符串
x = re.search('life(.*)python',a)
print(x.group(1))b = 'life is short,i use python,i love python'
x = re.search('life(.*)python(.*)python',b)
# 使用guoup,取出多个分组的字符串,以元组返回
print(x.group(0,1,2))
# 使用guoup,取出多个分组的字符串,不会取出全部,以元组返回
print(x.groups())
结果
ife is short,i use pythonis short,i use
('life is short,i use python,i love python', ' is short,i use ', ',i love ')
(' is short,i use ', ',i love ')
二、JSON
1.反序列化
json_str = '[{"name":"陈大方","age":22},{"name":"刘小银","age":20}]'
student = json.loads(json_str)
print(student)
结果
[{'name': '陈大方', 'age': 22}, {'name': '刘小银', 'age': 20}]
2.序列化
student = [{'name':'陈大方','age':22},{'name':'刘小银','age':20}]
# 使用dumps方法,将字符串转换成json,返回str
json_str = json.dumps(student,indent=4,ensure_ascii=False)
print(json_str)
结果
[{"name": "陈大方","age": 22},{"name": "刘小银","age": 20}
]
3.json数据类型可转换为python字符类型
八、正则表达式与JSON相关推荐
- Python(八) 正则表达式与JSON
一.初识正则表达式 正则表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配 快速检索文本.实现替换文本的操作 json(xml) 轻量级 web 数据交换格式 impor ...
- 正则表达式与JSON
正则表达式与JSON 一.初识正则表达式 # 正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配 # 快速检索文本.实现一些替换文本的操作 # 1.检查一串数字是否室电 ...
- 第十章、正则表达式和JSON
第十章.正则表达式和JSON 文章目录 第十章.正则表达式和JSON 一.正则表达式 二.JSON 一.正则表达式 正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配, ...
- Python之正则表达式与JSON
Python之正则表达式与JSON 1.定义 正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配. 可以快速检索文本,实现一些替换文本的操作 a = 'C|C++|C# ...
- Python3进阶--正则表达式、json、logging日志配置、数据库操作、枚举、闭包、匿名函数和高阶函数、time、datetime
第一章 变量.常用循环体.代码结构.代码练习 第二章 列表.元组等数据结构.字符串驻留机制及字符串格式化操作 第三章 函数.面向对象.文件操作.深浅拷贝.模块.异常及捕获 第四章 项目打包.类和对象高 ...
- Pyhton入门 笔记 第三天 正则表达式与JSON
一,判断字符中是否包含指定的单词 a='C|C++|Json|Java|C#|Python|javascript' print('Python' in a) #方式一 print(a.index('P ...
- 正则 指定开头结尾_Python核心知识系列:正则表达式与JSON
1 正则表达式必知必会 1.1 简介 正则表达式:是一些用来匹配和处理文本的字符串. 正则表达式的使用场景主要以下两种情况:一是查找特定的信息(搜索),二是查找并编辑特定的信息(替换). 用模式(pa ...
- JSON java 正则_9、正则表达式与JSON
正则表达式:一个特殊的字符序列,可以帮助检测一个字符串是否与我们所设定的字符序列相匹配. 功能:可以实现快速检索文本.替换文本的操作. 检测一串数字是否是电话号码 检测一个字符串是否符合e-mail格 ...
- 10. 正则表达式与JSON
正则表达式 正则表达式是一个特殊的字符序列,是对字符串的逻辑操作,主要是对字符串的一种过滤,用"元字符"与"普通字符"组成一个字符串规则对已知的字符串或文本过滤 ...
最新文章
- 2021 几何图机器学习大盘点 | 几何深度学习先驱 Michael Bronstein长文解读
- VTK:灯动画用法实战
- ORACLE SELECT INTO NO_DATA_FOUND问题
- 求二叉树的深度和宽度
- React中ref的使用方法
- 元素之和最接近 0 的区间(部分和)
- 计算机操作入门基础知识,电脑入门基本操作知识
- matlab 直方图修正,matlab直方图修正
- php导出doc文件_php生成word文档并下载
- HMI-47-【多媒体】Title界面实现 2
- 如何去除Mac截图的窗口阴影
- 【算法】剑指offer-删除链表中重复的节点最小栈
- Buddy Test测试中琐事温故
- lol丢失base.dll文件怎么办?base.dll文件下载
- 开发一个最简单的iOS App
- 明风:分布式图计算的平台Spark GraphX 在淘宝的实践
- [读书笔记]Mindset
- Jenny DAO 运营月报|2021 年 12 月
- 智能社 - VueJs(1-11章全)
- 对B/S,C/S,RIA的理解