python 正则表达式与JSON字符串
手册地址:
https://www.runoob.com/regexp/regexp-metachar.html
在线工具:
http://c.runoob.com/front-end/854
正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配(一个字符串是否与我们所设定这样的字符序列相匹配)。
快速检索文本,实现一些替换文本的操作
- 检查一串数字是否电话号码
- 检测一个字符串是否是email
- 把一个文本里指定的单词替换为另外一个单词
注意:
能使用底层包里自带的函数解决问题(string,strings,strcnov),首先使用库函数,其次再选择正则表达式(不好理解).
概括单字符集 匹配单字符

import re
# 概括单字符集
a = 'Python 11\t11Java&678p\nh\rp'
# \d 匹配任意数字,等价于 [0-9]。 \D 匹配任意非数字
# \w 匹配数字字母下划线 \W 匹配非数字字母下划线
# \s 匹配任意空白字符,等价于 [\t\n\r\f]。 \S 匹配任意非空字符
# . 匹配换行符之外\n的其它所有字符 - 匹配范围 a-zA-Z0-9
r1 = re.findall('\d',a)
r2 = re.findall('[0-9]',a) #匹配任何数字。类似于 [0123456789]
w1 = re.findall('\D',a)
w2 = re.findall('[^0-9]',a) #匹配除了数字外的字符
print(r1) #['1', '1', '1', '1', '6', '7', '8']
print(r2) #['1', '1', '1', '1', '6', '7', '8']
print(w1) #['P', 'y', 't', 'h', 'o', 'n', ' ', '\t', 'J', 'a', 'v', 'a', '&', 'p', '\n', 'h', '\r', 'p']
print(w2) #['P', 'y', 't', 'h', 'o', 'n', ' ', '\t', 'J', 'a', 'v', 'a', '&', 'p', '\n', 'h', '\r', 'p']
x1 = re.findall('\w',a)
x2 = re.findall('[A-Za-z0-9_]',a) #匹配数字字母下划线
x3 = re.findall('\W',a) #非匹配数字字母下划线
x4 = re.findall('[^A-Za-z0-9_]',a)
print(x1) # ['P', 'y', 't', 'h', 'o', 'n', '1', '1', '1', '1', 'J', 'a', 'v', 'a', '6', '7', '8', 'p', 'h', 'p']
print(x2) # ['P', 'y', 't', 'h', 'o', 'n', '1', '1', '1', '1', 'J', 'a', 'v', 'a', '6', '7', '8', 'p', 'h', 'p']
print(x3) #[' ', '\t', '&', '\n', '\r']
print(x4) #[' ', '\t', '&', '\n', '\r']
y1 = re.findall('\s',a)
y2 = re.findall('\S',a)
print(y1) #[' ', '\t', '\n', '\r']
print(y2) #['P', 'y', 't', 'h', 'o', 'n', '1', '1', '1', '1', 'J', 'a', 'v', 'a', '&', '6', '7', '8', 'p', 'h', 'p']
匹配字符集
import re
a = 'c0c++7Java8c9Python6Javascript'
# 使用python的内置函数
print(a.find('Python')>-1) # 输出 True 如果没有匹配到返回-1,否则返回第一个匹配到的位置
print('Python' in a) # 输出 True
# 使用正规表达式
r=re.findall('Python',a) #['Python']
print(r)
if len(r)>0:
print('ok')
else:
print('no')
# 输出:
# True
# True
# ['Python']
# ok
普通字符与元字符
- 普通字符 'Python'
- 元字符
\d
正则表达式 - 元字符
下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为:
https://www.runoob.com/regexp/regexp-metachar.html
元字符和普通的字符的混用
a = 'abc , acc , adc , aec , afc , ahc'
- 匹配字符串中间是cf的
- 匹配字符串中间 不是cf的
- 匹配字符串中间字母 是c-f的
- 普通字符(方括号两边的)a和c是用来定界的,方括号里面的cf元字符是用来匹配的规则,cf是c或f的关系
import re
# 匹配字符串中间是cf的
a = 'abc , acc , adc , aec , afc , ahc'
r = re.findall('a[cf]c',a) #普通字符a和c是用来定界的,cf元字符是用来匹配的
print(r) #['acc', 'afc']
# 匹配字符串中间 不是cf的
r2 = re.findall('a[^cf]c',a)
print(r2) #['abc', 'adc', 'aec', 'ahc']
# 匹配字符串中间字母 是c-f的
r3 = re.findall('a[c-f]c',a)
print(r3) #['acc', 'adc', 'aec', 'afc']
数量词{整数|*|+|?} 匹配多少次
| 符号 | 含义 |
|---|---|
| 整数 | 匹配指定长度的字母 |
| * | 匹配0次或者无限多次 |
| + | 匹配1次或者无限多次 |
| ? | 匹配0次或者1次 可以用来过滤单词后面不要的字母,去重 |

{整数} 匹配指定长度的字母
import re # 匹配指定长度的字母
a = 'Python 111\t11Java&678php66javascript\nh\rp' r1 =re.findall('[A-Za-z]{3}',a) # 每次匹配3个长度的字母
print(r1) #['Pyt', 'hon', 'Jav', 'php', 'jav', 'asc', 'rip']
{*} 匹配0次或者无限多次
{+} 匹配1次或者无限多次
{?} 匹配0次或者1次 可以用来过滤单词后面不要的字母,去重
import re # 数量词 a = 'pytho0python1pythonn2' # * 匹配0次或者无限多次 r1 = re.findall('python*',a)
print(r1) # 输出 ['pytho', 'python', 'pythonn'] # + 匹配1次或者无限多次
r2 = re.findall('python+',a)
print(r2) # 输出 ['python', 'pythonn'] # ? 匹配0次或者1次
r3 = re.findall('python?',a)
print(r3) # 输出 ['pytho', 'python', 'python']
[0-9]?\.[0-9]+ 小数点前匹配0到1次,\是转义小数点,小数点后匹配1次或者无限多次

?在非贪婪模式和数量词使用时是不同的意义
- ?在
非贪婪模里是用来转换贪婪与非贪婪模式的 - ?在
数量词里是表示匹配0次或者1次
a = 'pytho0python1pythonn2'
# ? 在数量词中 匹配0次或者1次
r1 = re.findall('python?',a)
print(r1) # 输出 ['pytho', 'python', 'python']
# ?在`非贪婪模`里
r2 = re.findall('python{1,2}?',a)
print(r2) #['python', 'python']
# `贪婪模`
r2 = re.findall('python{1,2}',a)
print(r2) #['python', 'pythonn']
贪婪模式 匹配指定长度的字符串
import re
# 贪婪模式
a = 'Python 111\t11Java&678php66javascript\nh\rp'
# \d 匹配任意数字,等价于 [0-9]。 \D 匹配任意非数字
# \w 匹配数字字母下划线 \W 匹配非数字字母下划线
# \s 匹配任意空白字符,等价于 [\t\n\r\f]。 \S 匹配任意非空字符
r1 =re.findall('[A-Za-z]{3,10}',a) #贪婪模式 每次匹配3-10个长度的字母
r2 =re.findall('[A-Za-z]{3,}',a) #贪婪模式 每次匹配3到任意个长度的字母
print(r1) #['Python', 'Java', 'php', 'javascript']
print(r1) #['Python', 'Java', 'php', 'javascript']
非贪婪模式 匹配指定长度的字符串
花括号后加上?号表示非贪婪模式
import re
# 非贪婪模式
a = 'Python 111\t11Java&678php66javascript\nh\rp'
# \d 匹配任意数字,等价于 [0-9]。 \D 匹配任意非数字
# \w 匹配数字字母下划线 \W 匹配非数字字母下划线
# \s 匹配任意空白字符,等价于 [\t\n\r\f]。 \S 匹配任意非空字符
r1 =re.findall('[A-Za-z]{3,10}?',a) # ?非贪婪模式 每次匹配3个长度的字母
r2 =re.findall('[A-Za-z]{3,}?',a) # ?非贪婪模式 每次匹配3任意个长度的字母
print(r1) #['Pyt', 'hon', 'Jav', 'php', 'jav', 'asc', 'rip']
print(r1) #['Pyt', 'hon', 'Jav', 'php', 'jav', 'asc', 'rip']
边界匹配
- ^ 边界的开始
- $ 边界的结束
# 边界匹配
import re
qq = '100000001'
# 4~8
# ^边界的开始 $边界的结束
r = re.findall('^\d{4,8}$',qq)
print(r) #打印 []
r1 = re.findall('^000',qq)
print(r1) #打印 [] qq不是以0开头的,匹配不到
r2 = re.findall('000$',qq) #qq不是以0结束的,匹配不到
print(r2) #打印 []
组的概念

import re
a = 'PythonPythonPythonPythonPython'
# a里是否有三个Python
##方法一
r = re.findall('PythonPythonPython',a)
print(r) #打印 ['PythonPythonPython']
##方法二
r2 = re.findall('(Python){3}',a) #括号表示组,是并且的关系,匹配时可以有多个组如,'(Python){3}(js)',
print(r2) #打印 ['Python']
##方法三
r3 = re.findall('Python{3}',a) #这种字法只能匹配单个字符(如:a) 不能匹配字符集(如单词:Python)
print(r3) #打印 []
参数匹配
第三个参数,|表示多种模式叠加
.点匹配换行符之外\n的其它所有字符- re.I 不区分大小写
- re.S 表示可以让
.点号匹配包括\n在内的所有字符
import re
a = 'PythonC#\nJavaPHP'
# 匹配出C#\n
r = re.findall('c#.',a)
print(r) #打印 []
r1 = re.findall('c#.', a , re.I)
print(r1) #打印 []
# .匹配换行符之外\n的其它所有字符
# re.I 不区分大小写
# re.S 表示.号匹配包括\n在内的所有字符
r1 = re.findall('c#.', a , re.I | re.S)
print(r1) #打印 ['C#\n']
替换
- 方法一:内置replace函数
- 方法二:正则普通替换
- 方法三:正则用函数替换
import re
a = 'PythonC#JavaC#PHPC#'
#替换C#为GO
##方法一:内置replace函数
#字符串是不能改变的,所以要重新给变量赋值
a1 = a.replace('C#','GO',2) #参数 老的 新的 替换的次数
print(a1) #输出 PythonGOJavaGOPHPC#
##方法二:正则普通替换
a2 = re.sub('C#','GO',a,1) #参数(匹配的规则)老的 新的 原字符串 替换的次数
print(a2) #输出 PythonGOJavaC#PHPC#
##方法三:正则用函数替换
def couvert(value):
print(value)
# 输出 匹配到了三次,所以输出三次
# <re.Match object; span=(6, 8), match='C#'>
# <re.Match object; span=(12, 14), match='C#'>
# <re.Match object; span=(17, 19), match='C#'>
# 每次匹配时拿到match里的值
matched = value.group()
return '!!' + matched + '!!' # 返回每次处理后的match里的值
a3 = re.sub('C#',couvert,a,3)
print(a3) #输出 Python!!C#!!Java!!C#!!PHP!!C#!!
python 正则表达式与JSON字符串的更多相关文章
- Python正则表达式如何进行字符串替换实例
Python正则表达式如何进行字符串替换实例 Python正则表达式在使用中会经常应用到字符串替换的代码.有很多人都不知道如何解决这个问题,下面的代码就告诉你其实这个问题无比的简单,希望你有所收获. ...
- python解析复杂json字符串
因为项目需要,公司领导对提出了接口测试的要求,因此作为一个测试人员,我第一时间就想到了jmeter这个利器,前面文章也有说明过怎么用jmeter做http协议的接口测试,这里我不再做讲解,此篇主要讲解 ...
- python之处理json字符串
一.如何从文件中读取json字符串 通过json模块可以处理json数据. 1.loads()方法 loads(json_object)将json字符串转换成dict类型. import json # ...
- python 获取的json字符串取值
获取到的json字符串,然后对其取值 {u'result': {u'10.10.10.100': {u'status': u'OK', u'msg': u"{'listen': {'': s ...
- python中的 json 模块使用
(1)python 中生成 json 字符串: import json data = dict(ret=0, msg="Welcome, Login success!") json ...
- python 对象和json互相转换
一.python对json的支持 从python2.6开始,python标准库中添加了对json的支持,操作json时,只需要import json即可. 二.python对象转换成json字符串 在 ...
- python中读取json文件报错,TypeError:the Json object must be str, bytes or bytearray,not ‘TextIOWrapper’
利用python中的json读取json文件时,因为错误使用了相应的方法导致报错:TypeError:the Json object must be str, bytes or bytearray,n ...
- Python基础之JSON
作用 对Python对象进行序列化,便于存储和传输 Python对象与JSON字符串相互转换 Python对象转JSON字符串 import json data = [ { 'a' : 1, 'b' ...
- 18 JSON、JSON字符串、反序列化
JSON教程 : https://www.runoob.com/python/python-json.html 概念 JSON是一种轻量级的数据交换格式,它是一种数据格式! JSON易于阅读.易于解析 ...
随机推荐
- 还不知道如何使用 IDEA ?教你三招快速掌握 IDEA
前言 IntelliJ IDEA 是一个非常强大的 IDE,拥有许多功能.在 IDEA 中大部分功能都可以用快捷键去完成,如果掌握了大部分快捷键,可以只使用键盘开发了. ps: 最近正在练习快捷键,准 ...
- Java 内存模型(一)
打算花比较长的篇幅来描述下自己理解的JVM,尽量描述的清晰易懂一些,从简单慢慢到慢慢深入,一方面自己也复习一下,一方面也供大家参考,少走些弯路.鉴于本人水平有限,如有错误的地方,欢迎指出,感谢. 一段 ...
- Spring和springMVC父子容器的关系
部分转载自:https://www.cnblogs.com/ljdblog/p/7461854.html springMVC容器和Spring容器 为什么一定要在web.xml中配置spring的li ...
- Ubuntu安装LAMP环境(PHP5.6) 以及下载安装phpmyadmin
参考路径: http://blog.nciaer.com/?p=133 修改apache(2.4.18)的web路径时, 需要将 /etc/apache2/sites-available/000def ...
- ElasticSearch多个字段分词查询高亮显示
ElasticSearch关键字查询,将关键字分词后查询,多个字段,查询出来字段高亮显示. 查询方法如下: public List<NewsInfo> searcher2(String k ...
- mysql mysqldump 本地数据库导入本地数据库的命令
C:\Users\Administrator>mysqldump -h localhost -P 3306 -u root -proot -n -R --triggers foryou |mys ...
- freebsd为网卡设置别名
ifconfig em0 172.16.21.5 netmask 255.255.255.0 alias
- nmap --script http-enum,http-headers,http-methods,http-php-version -p 80 目标域
从http服务器上收集到更多地信息 nmap --script http-enum,http-headers,http-methods,http-php-version -p 80 目标域
- Merge更新同步一个表
merge T2 --目标表using T1 --源表 on T1.id=T2.id --匹配条件 when matched then --匹配update set [name]= ...
- Python常见编程规范总结
Pythonic定义 Python最常用的编码风格还是PEP8,详见:http://jython.cn/dev/peps/pep-0008/ Pythonic确实很难定义,先简单引用下<Pyth ...