一、正则表达式

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相关推荐

  1. Python(八) 正则表达式与JSON

    一.初识正则表达式 正则表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配 快速检索文本.实现替换文本的操作 json(xml) 轻量级 web 数据交换格式 impor ...

  2. 正则表达式与JSON

    正则表达式与JSON 一.初识正则表达式 # 正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配 # 快速检索文本.实现一些替换文本的操作 # 1.检查一串数字是否室电 ...

  3. 第十章、正则表达式和JSON

    第十章.正则表达式和JSON 文章目录 第十章.正则表达式和JSON 一.正则表达式 二.JSON 一.正则表达式 正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配, ...

  4. Python之正则表达式与JSON

    Python之正则表达式与JSON 1.定义 正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配. 可以快速检索文本,实现一些替换文本的操作 a = 'C|C++|C# ...

  5. Python3进阶--正则表达式、json、logging日志配置、数据库操作、枚举、闭包、匿名函数和高阶函数、time、datetime

    第一章 变量.常用循环体.代码结构.代码练习 第二章 列表.元组等数据结构.字符串驻留机制及字符串格式化操作 第三章 函数.面向对象.文件操作.深浅拷贝.模块.异常及捕获 第四章 项目打包.类和对象高 ...

  6. Pyhton入门 笔记 第三天 正则表达式与JSON

    一,判断字符中是否包含指定的单词 a='C|C++|Json|Java|C#|Python|javascript' print('Python' in a) #方式一 print(a.index('P ...

  7. 正则 指定开头结尾_Python核心知识系列:正则表达式与JSON

    1 正则表达式必知必会 1.1 简介 正则表达式:是一些用来匹配和处理文本的字符串. 正则表达式的使用场景主要以下两种情况:一是查找特定的信息(搜索),二是查找并编辑特定的信息(替换). 用模式(pa ...

  8. JSON java 正则_9、正则表达式与JSON

    正则表达式:一个特殊的字符序列,可以帮助检测一个字符串是否与我们所设定的字符序列相匹配. 功能:可以实现快速检索文本.替换文本的操作. 检测一串数字是否是电话号码 检测一个字符串是否符合e-mail格 ...

  9. 10. 正则表达式与JSON

    正则表达式 正则表达式是一个特殊的字符序列,是对字符串的逻辑操作,主要是对字符串的一种过滤,用"元字符"与"普通字符"组成一个字符串规则对已知的字符串或文本过滤 ...

最新文章

  1. 2021 几何图机器学习大盘点 | 几何深度学习先驱 Michael Bronstein长文解读
  2. VTK:灯动画用法实战
  3. ORACLE SELECT INTO NO_DATA_FOUND问题
  4. 求二叉树的深度和宽度
  5. React中ref的使用方法
  6. 元素之和最接近 0 的区间(部分和)
  7. 计算机操作入门基础知识,电脑入门基本操作知识
  8. matlab 直方图修正,matlab直方图修正
  9. php导出doc文件_php生成word文档并下载
  10. HMI-47-【多媒体】Title界面实现 2
  11. 如何去除Mac截图的窗口阴影
  12. 【算法】剑指offer-删除链表中重复的节点最小栈
  13. Buddy Test测试中琐事温故
  14. lol丢失base.dll文件怎么办?base.dll文件下载
  15. 开发一个最简单的iOS App
  16. 明风:分布式图计算的平台Spark GraphX 在淘宝的实践
  17. [读书笔记]Mindset
  18. Jenny DAO 运营月报|2021 年 12 月
  19. 智能社 - VueJs(1-11章全)
  20. 对B/S,C/S,RIA的理解

热门文章

  1. js中singleton模式解析及运用
  2. http://www.iefans.net/ie6-ie7-ie8-ieduobanben
  3. java购物商城_基于javaweb实现的简单购物商城
  4. 2006年十二生肖运势(收藏)
  5. Scrapy 抓取指数基金6个月前10 名 存到mongodb 中
  6. MLSQL生态一键体验
  7. 生成符合SCI论文投稿要求的高清图方法
  8. 实时时钟DS1302-第1季第14部分-朱有鹏-专题视频课程
  9. Java爬虫_资源网站爬取实战
  10. 微信 jsapi支付 和 Native支付 php