Python的正则表达式与JSON
Python的正则表达式需要导入re模块
菜鸟教程:http://www.runoob.com/python/python-reg-expressions.html
官方文档:https://docs.python.org/3.6/library/re.html
一译中文:https://yiyibooks.cn/xx/python_352/library/re.html
常用正则表达式:https://www.cnblogs.com/Akeke/p/6649589.html
===========================================================
1.方法
findall(pattern, string, flags=0):
| pattern | 匹配的正则表达式 |
| string | 要匹配的字符串。 |
| flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
flags:
| 修饰符 | 描述 |
|---|---|
| re.I | 使匹配对大小写不敏感 |
| re.L | 做本地化识别(locale-aware)匹配 |
| re.M | 多行匹配,影响 ^ 和 $ |
| re.S | 使 . 匹配包括换行在内的所有字符 |
| re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
| re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
flags可以指定多个 例:re.I | re.S 两者是且的关系
sub(pattern, repl, string, count=0, flags=0):检索和替换
参数:
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
repl可以为函数 很强大 例:
import re
s = 'A8C3721D86'
def convert(value):
matched = value.group() #拿到具体的值
if int(matched) >= 6:
return ''
else:
return ''
r = re.sub('\d',convert,s)
print(r)
----------------------------------------------------------------
A9C0900D99
#group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);
match(pattern, string, flags=0):re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
search(pattern, string, flags=0): re.search 扫描整个字符串并返回第一个成功的匹配。
2.元字符
\d :匹配一个数字字符
\D:匹配一个非数字字符
\w:匹配字母数字及下划线 ,字母:单词字符(\的只能匹配a-z A-Z 0-9 _)
\W:匹配非字母数字及下划线,(&,\n,\r等都算作非字母数字及下划线)
\s:匹配任意空白字符,等价于 [\t\n\r\f].(制表符都算作空白字符 \n,\t,\r等)
\S:匹配任意非空字符
[...]:用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
import re
s = 'abc,acc,adc,aec,afc,ahc'
r = re.findall('a[cf]c',s)
print(r) ----------
['acc', 'afc']
[^...]:不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
数量词
re{n}:让前面的re表达式匹配多次,例:
import re
s = 'python 11111java678php'
r = re.findall('[a-z]{3}',s)
print(r)
--------------------------------------------------
['pyt', 'hon', 'jav', 'php']
re{ n, m}:匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式(够多则使用m值)
import re
s = 'python 11111java678php'
r = re.findall('[a-z]{3,6}',s)
print(r)
-----------------------------------------------------
['python', 'java', 'php']
re{ n, m}?:可以转换为非贪婪方式(使用n值)
re*:匹配0个或多个的表达式。(*前面的字符)
import re
s = 'pytho0python1pythonn2'
r = re.findall('python*',s)
print(r)
-------------------------------------------------
['pytho', 'python', 'pythonn']
re+:匹配1个或多个的表达式。
re?:匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式(有一个也匹配,忽略后面多的re)
import re
s = 'pytho0python1pythonn2'
r = re.findall('python?',s)
print(r)
----------------------------------------------
['pytho', 'python', 'python']
. :匹配任意字符,除了换行符\n,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
边界匹配
^:匹配字符串的开头
$:匹配字符串的末尾
import re
qq = ''
r = re.findall('\d{4,8}',qq)
print("\d{4,8} : " + str(r)) r2 = re.findall('^\d{4,8}',qq)
print('^\d{4,8}: '+str(r2)) r3 = re.findall('\d{4,8}$',qq)
print('\d{4,8}$: '+ str(r3)) r4 = re.findall('^\d{4,8}$',qq) #匹配整个字符串
print('^\d{4,8}$: '+ str(r4)) r5 = re.findall('^000',qq) #^匹配字符串开头,则开头必须000 ;$同理
print('^000: '+ str(r5))
-----------------------------------------------------------------------------
\d{4,8} : ['']
^\d{4,8}: ['']
\d{4,8}$: ['']
^\d{4,8}$: []
^000: []
组
(re):匹配括号内的表达式,也表示一个组
import re
qq = 'PythonPythonPythonPythonPythonPythonPython'
r = re.findall('(Python){3}',qq)
print(r)
------------------------------------------------------------------------
['Python', 'Python']
========================================================================
JSON
导入json模块
反序列化过程
import json
json_str = '{"name":"zhangsan","age":18}' #这里的json 中的字符串类型必须用"" ,因为里面用了"",所以外面需要用''
student = json.loads(json_str)
print(type(student))
print(student)
-----------------------------------------------------------------------
<class 'dict'>
{'name': 'zhangsan', 'age': 18}
import json
json_str = '[{"name":"zhangsan","age":18},{"name":"lisi","age":19}]'
student = json.loads(json_str)
print(type(student))
print(student)
--------------------------------------------------------------------
<class 'list'>
[{'name': 'zhangsan', 'age': 18}, {'name': 'lisi', 'age': 19}]
序列化过程
import json
student = [{'name':'zhangsan','age':18,'flag':False},{'name':'lisi','age':18,'flag':True}]
json_str = json.dumps(student)
print(type(json_str))
print(json_str)
-----------------------------------------------------------------------------
<class 'str'>
[{"name": "zhangsan", "age": 18, "flag": false}, {"name": "lisi", "age": 18, "flag": true}]
JSON中的数据类型和python中的对应关系:

JSON对象:
JSON:
JSON字符串:
Python的正则表达式与JSON的更多相关文章
- Python(八) 正则表达式与JSON
一.初识正则表达式 正则表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配 快速检索文本.实现替换文本的操作 json(xml) 轻量级 web 数据交换格式 impor ...
- python 历险记(六)— python 对正则表达式的使用(上篇)
目录 引言 什么是正则表达式? 正则表达式有什么用? 正则表达式的语法及使用实例 正则表达式语法有哪些? 这些正则到底该怎么用? 小结 参考文档 系列文章列表 引言 刚接触正则表达式,我也曾被它们天书 ...
- Python语言中对于json数据的编解码——Usage of json a Python standard library
一.概述 1.1 关于JSON数据格式 JSON (JavaScript Object Notation), specified by RFC 7159 (which obsoletes RFC 46 ...
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】
[python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...
- Python 进阶 - 正则表达式
1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...
- python study - 正则表达式
第 7 章 正则表达式 7.1. 概览 7.2. 个案研究:街道地址 7.3. 个案研究:罗马字母 7.3.1. 校验千位数 7.3.2. 校验百位数 7.4. 使用 {n,m} 语法 7.4.1. ...
- python使用正则表达式文本替换
2D客户端编程从某种意义上来讲就是素材组织,所以,图片素材组织经常需要批量处理,python一定是最佳选择,不管是win/linux/mac都有一个简单的运行环境 举两个应用场景: 如果不是在某个文件 ...
- python的正则表达式 re
python的正则表达式 re 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一 ...
- Python之正则表达式(re模块)
本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 正则表达式(Regluar Expressions)又称规则 ...
随机推荐
- 扩展中国剩余定理(扩展CRT)详解
今天在$xsy$上翻题翻到了一道扩展CRT的题,就顺便重温了下(扩展CRT模板也在里面) 中国剩余定理是用于求一个最小的$x$,满足$x\equiv c_i \pmod{m_i}$. 正常的$CRT$ ...
- 【JXOI2018】排序问题 贪心
我们令$sum_i$表示数字i在加完数字的数列中出现的次数,那么答案显然为$\dfrac{(n+m)!}{\sum_{i=0}^{\infty}sum_i!}$ 不难发现,当每次添加的数为$[l,r] ...
- 02--STL算法(函数对象和谓词)
一:函数对象(仿函数):实现状态记录等其他操作<相对于普通函数> 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象. 即是重载了“ ...
- http正向代理与反向代理
转自:https://baijiahao.baidu.com/s?id=1566988836622068&wfr=spider&for=pc 一句话总结正向代理与反向代理的区别:正向代 ...
- 在Vue的webpack中结合runder函数
在Vue的webpack中结合runder函数 1.引入: <h1>下面是vue的内容:</h1> <div id="app"> <log ...
- Jmeter参数化与检查点
一.Jmeter参数话有3种方法: 1. add->pre processors->user parameter(用户参数) 2.add->config Element->CS ...
- mysql Inoodb 内核
MySQL从5.5版本开始将InnoDB作为默认存储引擎,该存储引擎是第一个完整支持事务ACID特性的存储引擎,且支持数据行锁,多版本并发控制(MVCC),外键,以及一致性非锁定读. 作为默认存储引擎 ...
- 分布式ID生成方法-趋势有序的全局唯一ID
一.需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:tiezi-id 这个记录标识往往就是数据 ...
- 编写代码:ATM的登陆界面(用户验证、主菜单的选择) 查询-- 存款-- 取款-- 退出
#include <stdio.h>#include <windows.h>int main (void){ int password,one,two,money1=10 ...
- CUBA 7:崭新的篇章
原文链接:https://www.cuba-platform.com/blog/cuba-7-the-new-chapter 最近(2019年春节前夕)发布的 CUBA 和 Studio 的第7个版本 ...