Python之正则表达式与JSON
1、定义
正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配。
可以快速检索文本,实现一些替换文本的操作
a = ‘C|C++|C#|Python|Javascript’ print(a.index('Python')> -1) print('Pythin' in a)
import re a = ‘C|C++|C#|Python|Javascript’ r = re.findall('Python', a) #返回一个列表 if len(r) > 0: print("字符串中包含Pyython")
import re a = ‘C0C++4C#6Python1Javascript’ r = re.findall('\d',a) #正则表达式中用“\d”统配数字 print(a)
'Python’普通字符 ‘\d’元字符
import re a = ‘C0C++4C#6Python1Javascript’ r = re.findall('\D',a) #正则表达式中用“\D”匹配所有的非数字 print(a)
字符集
import re a = 'abc,acc,adc,aec,afc,ahc' r = re.findall('a[cf]c',s) #匹配出acf或afc print(r)
import re a = 'abc,acc,adc,aec,afc,ahc' r = re.findall('a[^cf]c',s) #匹配出非acf和非afc print(r)
import re a = 'abc,acc,adc,aec,afc,ahc' r = re.findall('a[c-f]c',s) #匹配出a[c,d,e,f]c print(r)
概况字符集
import re a = ‘C0C++4C#6Python1Javascript’ r = re.findall('\d',a) #正则表达式中用“\d”统配数字 print(a) import re a = ‘C0C++4C#6Python1Javascript’ r = re.findall('[0-9]',a) #正则表达式中用“\d”统配数字等价于[0-9] print(a) ```python import re a = ‘C0C++4C#6Python1Javascript’ r = re.findall('\w',a) #正则表达式中用“\w”匹配所有的数字字母 print(a)
"\w" 单词字符集,可以匹配大小写字母,数字和_ 等价于[A-Za-z0-9_] “\W” 非单词字符集 & “\s” 空白字符 包括空格,\t,\n,\r “\S” 匹配非空白字符 . 匹配除\n以外的所有字符
数量词
import re a ='python 1111java678php' r = re.findall('[a-z]{3}',a) #匹配连续的a-z的三个字符 print(r) import re a ='python 1111java678php' r = re.findall('[a-z]{3,6}',a) #匹配连续的a-z的3到6个字符 print(r)
贪婪与非贪婪 尽可能匹配最大值
import re a ='python 1111java678php' r = re.findall('[a-z]{3}',a) #匹配连续的a-z的三个字符 print(r) 结果: ['python','java','php'] 由于贪婪
非贪婪模式,大括号后加?
import re a ='python 1111java678php' r = re.findall('[a-z]{3,6}?',a) #非贪婪模式匹配 print(r) 结果: ['pyt’,hon','jav','php'] #由于非贪婪只匹配3个字符
* 匹配*前面的字符0次或无数次 + 匹配*前面的字符1次或无数次 ? 匹配*前面的字符0次或1次
边界匹配
import re a = '100001' r = re.findall('\d{4,8}',qq) #匹配4到8位数字 print(r) import re a = '100001' r = re.findall(^'\d{4,8}$',qq) #边界匹配 print(r) import re a = '10000000001' r = re.findall(^'000$',qq) #边界匹配 print(r)
import re a = 'PythonPythonPythonPythonPythonPython' r = re.findall('(Python){3}',a) print(r)
import re lanuage = 'PythonC#JavaPHP' r = re.findall(‘c#.{1}’,lanuage,re.I |re.S) print(r) re.I 忽略大小写 re.S 改变.的功能
re.sub
import re lanuage = 'PythonC#JavaPHP' r = re.sub(‘C#’,'GO',lanuage,1) print(r) # r = re.sub(‘需要被替换的字符’,‘替换后的字符',lanuage,被替换的次数(1表示1次,0表示无数次))
import re lanuage = 'PythonC#JavaPHP' r = lanuage.replace(‘C#’,'GO') print(r)
import re lanuage = 'PythonC#JavaPHP' def convert(value): pass # 先匹配C#,将c#作为参数传给convert()函数,再将返回值用于替换C# r = re.sub(‘C#’,convert,lanuage) print(r)
import re s = 'ABC3721D86' r = re.match('\d',s) #从字符串首字母开始匹配,第一个字符不符合,则返回空 print(r) r1 = re.search('\d',s) # 搜索整个字符串,首字母对匹配不影响 print(r1) # 他们都只匹配一次
group()函数
span()函数
# 获取life和python中间的内容 import re s = 'life is short,i use python' r = re.search('life.*python',s) print(r.gruop()) group(0)默认返回完整匹配结果,要通过组号访问,需要从group(1)开始
import re s = 'life is short,i use python, i love python' r = re.search('life(.*)python(.*)python',s) print(r.gruop(0)) print(r.gruop(1)) print(r.gruop(2)) # print(r.group(0,1,2)) print(r.groups()) #只会返回之间的字符串
JSON
javascript 对象标记
是一种轻量级的数据交换格式
JSON字符串,符合json格式的字符串
优点:易于阅读解析网络传输效率高,跨语言交换数据
json的载体,json字符串
import json # json_str = "{'name':'qiyue','age':18}" #错误,json字符串规定用“” json_str = '{"name":"qiyue","age":18}' #json object student = json.loads(json_str) print(type(student)) print(student) print(student['name']) print(student['age'])
import json json_str = '{"name":"qiyue","age":18,"flag":false},{"name":"qiyue","age":18}' student = json.loads(json_str) print(type(student)) print(student) 从字符串到语言的数据类型的转换,反序列化 序列化 import json studeht = [ {"name":"qiyue","age":18,"flag":false}, {"name":"qiyue","age":18}] json_str = json.dumps(student) print(json_str)
json python object dict array list string str
json对象 json json字符串 javascript ECMSCRIPT规范和标准的实现