继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python(八) 正则表达式与JSON

HUX布斯
关注TA
已关注
手记 171
粉丝 83
获赞 377

一、初识正则表达式

正则表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配

快速检索文本、实现替换文本的操作

json(xml) 轻量级 web 数据交换格式

复制代码

import re

a='C|C++|Java|C#||Python|Javascript'
 r= re.findall('Python',a)print(r)if len(r) > 0:    print('字符串中包含Python')else:    print('No')

['Python']
字符串中包含Python

复制代码

 

二、元字符与普通字符

复制代码

import re

a='C0C++7Java8C#9Python6Javascript'r= re.findall('\d',a)print(r)

b=''for x in a:    try:
        int(x)
        b +=x+','
    except :        passprint(b)

结果:
['0', '7', '8', '9', '6']
0,7,8,9,6,

复制代码

'Python' 普通字符 '\d' 元字符

 

三、字符集

复制代码

import re#找出中间一个字符不是C 和F的 单词s = 'abc, acc, adc, aec, afc, ahc'r = re.findall('a[^cf]c', s)  #[a-z] [cf]print(r)

结果:
['abc', 'adc', 'aec', 'ahc']

复制代码

 

四、概括字符集

复制代码

#\d 数字  \D 字母#\w  数字和字母 =[a-zA-Z0-9_]  \W #\s  空白字符  \Sa='python 11\t11java&678p\nh\rp'r = re.findall('\s', a)print(r)


结果:
[' ', '\t', '\n', '\r']

复制代码

 

五、数量词

复制代码

a='python 1111java&678php'r = re.findall('[a-z]{3,6}', a)print(r)

结果:
['python', 'java', 'php']

复制代码

 

六、贪婪与非贪婪

复制代码

a='python 1111java&678php'r = re.findall('[a-z]{3,6}?', a)#贪婪 与 非贪婪 ?print(r)

结果:
['pyt', 'hon', 'jav', 'php']

复制代码

 

七、匹配0次1次或者无限多次

复制代码

# * 匹配0次或者无限多次# + 匹配1次或者无限多次# ? 匹配0次或者1次a='pytho0python1pythonn2pythonw'r = re.findall('python*', a)print(r)

结果:
['pytho', 'python', 'pythonn', 'python']

复制代码

 

八、边界匹配符

复制代码

qq = '12345678'# 4~8 r =  re.findall('^\d{4,8}$', qq)print(r)

a = '123456789'# 4~8  ^规则$ ^开头 $结尾e =  re.findall('^\d{4,8}$', a)print(e)

结果:
['12345678']
[]

复制代码

 

九、组

复制代码

# () 组 a = 'pythonpythonpythonpythonpython'# r =  re.findall('(python){3}', a)print(r)

结果:
['python']  代表存在一组(pythonpythonpython) 这样的数据

复制代码

 

十、匹配模式参数

复制代码

# I | S 忽略大小写 | 匹配所有字符lanuage = 'PythonC#\nJavaPHP'r = re.findall('c#.{1}', lanuage,re.I | re.S)print(r)


结果:
['C#\n']

复制代码

 

十一、re.sub正则替换

搜索替换

复制代码

def convert(value):
    matched = value.group()    # print(value) <_sre.SRE_Match object; span=(6, 8), match='C#'>
    return '!!'+matched+'!!'lanuage = 'PythonC#JavaC#PHPC#'# r = re.sub('C#', 'GO', lanuage, 1) 返回结果: PythonGOJavaC#PHPC## s=lanuage.replace('C#', 'GO')r = re.sub('C#', convert, lanuage)  #传入参数print(r)

结果:
Python!!C#!!Java!!C#!!PHP!!C#!!

复制代码

 

十二、把函数作为参数传递

复制代码

def convert(value):
    matched = value.group() #拿到对象的值
    # print(value) <_sre.SRE_Match object; span=(6, 8), match='C#'>
    if int(matched) >=6 :        return '9'
    else:        return '0'lanuage = 'A8C3721D86'r = re.sub('\d', convert, lanuage)print(r)#A9C0900D99

复制代码

 

十三、search与match函数

复制代码

s = 'A8C3721D86'# None 从开头开始匹配 假如没有找到相应的匹配结果 返回None 只匹配一次r = re.match('\d', s) 
print(r) #None#搜索这个字符串 一旦找到第一个满足匹配的结果就返回 只匹配一次r1 = re.search('\d', s)print(r1) #<_sre.SRE_Match object; span=(1, 2), match='8'>print(r1.group()) #8print(r1.span()) # (1, 2)r2 = re.findall('\d', s)print(r2)  #['8', '3', '7', '2', '1', '8', '6']

复制代码

 

十四、group分组

复制代码

#提取life 和python 之间的值s = 'life is short,i use python'#Noner = re.search('life.*python', s)print(r.group()) #life is short,i use python group(组号)r = re.search('life(.*)python', s)print(r.group(0)) #life is short,i use python group(组号)print(r.group(1)) # is short,i use#group(0)  一种特殊情况 匹配正则表达式完整的结果r = re.findall('life(.*)python', s)print(r) #[' is short,i use ']

复制代码

 

复制代码

s = 'life is short,i use python, i love python'r = re.search('life(.*)python(.*)python', s)print(r.group(0)) # life is short,i use python, i love python print(r.group(1)) # is short,i useprint(r.group(2)) # , i loveprint(r.group(0,1,2)) #('life is short,i use python, i love python', ' is short,i use ', ', i love ')print(r.groups()) # (' is short,i use ', ', i love ')

复制代码

 

十五、一些关于学习正则的建议

复制代码

#\d 数字  \D 字母#\w  数字和字母 =[a-zA-Z0-9_]  \W #\s  空白字符  \S# .  匹配除了换行符\n之外其他所有字符# * 匹配0次或者无限多次# + 匹配1次或者无限多次# ? 匹配0次或者1次# () 组 # I | S 忽略大小写 | 匹配所有字符

复制代码

 

python :爬虫,数据处理

十六、理解JSON

JSON  是一种轻量级的数据交换格式

字符串是JSON的表现形式

符合 JSON 格式的字符串叫做 JSON 字符串

{"name":"qiyue"}

JSON VS XML

优势:

跨语言交换数据

易于阅读

易于解析

网络传输效率高

 

十七、反序列化

复制代码

import json# JSON object arrayjson_str = '{"name":"qiyue","age":18}'s =  json.loads(json_str)# dict#反序列化s =  json.loads(json_str) #load()  把json 的数据类型 转换为我们自己语言的数据类型print(type(s)) #<class 'dict'>print(s) #{'name': 'qiyue', 'age': 18}print(s['name']) # qiyuejson_str = '[{"name":"qiyue","age":18},{"name":"qiyue","age":18}]'s =  json.loads(json_str)print(type(s)) # <class 'list'>print(s) # [{'name': 'qiyue', 'age': 18}, {'name': 'qiyue', 'age': 18}]

复制代码

 

复制代码

JSON     Python
object   dict
array    list
string   str
number   int
number   float
true     True
false    False
null     None

复制代码

 

十八、序列化

复制代码

#序列化 为jsonstudent = [
    {"name":"qiyue","age":18, 'flag':False},
    {"name":"python","age":18}
]


json_str =  json.dumps(student)print(type(json_str)) # <class 'str'>print(json_str) #[{"name": "qiyue", "age": 18, "flag": false}, {"name": "python", "age": 18}]

复制代码

 

十九、小谈JSON、JSON对象与JSON字符串

JSON 是一种轻量级的数据交换格式

JSON对象 局限于语言

JSON字符串 

JSON 有自己的数据类型

虽然它和JavaScript  的数据类型有些相似 但是他们不是一种语言 

 

ECMASCRIPT一个标准  JavaScript   ActionScription  JSON 实现标准的一种方案

REST 服务

https://img.mukewang.com/5b783dd70001305f08340439.jpg

原文出处:https://www.cnblogs.com/zhangtaotqy/p/9498543.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP