1正则表达
import re
# 1.字符集 [ad] 表示a或者d [^ad] 表示除了a和d之外的字符 [a-d] 表示a到d之间的字符
s = 'asd dfg dss add dsa dsd dsd'
a = re.findall('a[sd]d',s)
b = re.findall('a[^ad]d',s)
print(a)
print(b)
# 概括字符集
# \d 表示数字 \D 表示非数字 \s 表示空白字符 \S 表示非空白字符 \w 表示单词字符 \W 表示非单词字符
s1 = '123 456 789 0sddf&\n'
a1 = re.findall('\W',s1)
print(a1)
# 量词
# * 表示0次或多次 + 表示1次或多次 ? 表示0次或1次 {n} 表示n次 {n,} 表示n次或多次 {n,m} 表示n到m次
s2 = 'python java 789 php 456 python'
a2 = re.findall('[a-z]{3,6}',s2) # 量词默认是贪婪模式,即尽可能多的匹配
a3 = re.findall('[a-z]{3,6}?',s2) # 非贪婪模式,即尽可能少的匹配
print(a2)
print(a3)
# *? 表示0次或多次 +? 表示1次或多次 ? 表示0次或1次 {n}? 表示n次 {n,}? 表示n次或多次 {n,m}? 表示n到m次
s3 = 'pytho java 789 php 456 pythonn123python55555pytho789pythonnn'
a4 = re.findall('python*',s3) # *前面的字符匹配0次或多次
a5 = re.findall('python?',s3) # ?前面的字符匹配0次或多次 这个可以用于去重
print(a4)
print(a5)
# 边界匹配
# ^ 表示字符串的开头 $ 表示字符串的结尾 \b 表示单词的边界 \B 表示非单词的边界
s4 = '1206013397'
a6 = re.findall('^120',s4) # 匹配字符串的开头
a7 = re.findall('\d*7$',s4) # 匹配字符串的结尾
a8 = re.findall('^\d{4,10}$',s4) # 匹配单词的边界
print(a6)
print(a7)
print(a8)
#组
s5 = 'python java 789 php 456 pythonn123python55555pytho789pythonnn'
a9 = re.findall('(python){1}',s5) # 匹配python*前面的字符
print(a9)
# re.I 表示忽略大小写 re.M 表示多行匹配 re.S 表示单行匹配 re.X 表示忽略空白字符
# .表示除了换行符之外的任意字符
s6 = 'Java\n python Python JAVA'
a10 = re.findall('java.{1}',s6,re.I | re.S) # 忽略大小写和换行符
print('a10等于:' + str(a10))
# re.sub() 表示替换符合规则的字符串 replace() 表示替换字符串
s7 = 'Javac#pythonPythonc#goJAVA'
a11 = re.sub('c#','134',s7,1) # 第一个参数表示要替换的字符串,第二个参数表示替换成的字符串,第三个参数表示要替换的字符串所在的字符串,第四个参数表示替换的次数
print(a11)
# sub()强大的地方在于一二个参数可以是一个函数
lanuage = 'python java php c# c++ c java python'
def func(m):
metch = m.group()
# return 'python'
# return '123'
return '!!' + metch + '!!'
a12 = re.sub('python',func,lanuage)
print(a12)
# 替换字符串lanuage中大于5的数字为2
lanuage = '155dasdfds789sds1ds36696'
def func(m):
metch = m.group()
if int(metch) > 5:
return '2'
else:
return metch
a13 = re.sub('\d',func,lanuage)
print(a13)
# 我们自己编写函数的时候可以参看一下这种设逻辑
## 把函数作为参数传递
re方法
# re.findall() 表示匹配所有符合规则的字符串
# re.search() 表示匹配第一个符合规则的字符串
# re.match() 表示匹配字符串的开头
# re.sub() 表示替换符合规则的字符串
# re.split() 表示按照符合规则的字符串分割字符串
# re.compile() 表示编译正则表达式
# re.escape() 表示转义特殊字符
import re
s = '3456fff66f'
r2 = re.findall('\d',s)
r = re.match('\d',s)
rr =r.group() # 返回匹配的字符串
rrr =r.span() # 返回匹配的字符串的起始位置和结束位置
print(rr)
print(rrr)
r1 = re.search('\d',s)
r4 = re.split('\d',s)
# r5 = re.compile('\d')
# r6 = re.escape(s)
print(r)
print(r2)
print(r1)
print(r4)
# print(r5)
# print(r6)
import re
s = 'life is short, you need python'
print(re.findall('life(.*)python',s)) #匹配life和python之间的内容
r = re.search('life(.*)python',s)
print(r.group(1)) #匹配life和python之间的内容
print(r.group(0)) #匹配整个字符串
print(r.span()) #匹配字符串的起始位置和结束位置
print(r.start()) #匹配字符串的起始位置
print(r.end()) #匹配字符串的结束位置
# 还是用findall 方便一点
s1 = 'life is short, you need python i love python'
print(re.findall('life(.*)python(.*)python',s1)) #匹配life和python之间的内容
r1 = re.search('life(.*)python(.*)python',s1)
print(r1.group(0)) #匹配整个字符串
print(r1.span()) #匹配字符串的起始位置和结束位置
print(r1.start()) #匹配字符串的起始位置
print(r1.end()) #匹配字符串的结束位置
print(r1.group(1)) #匹配life和python之间的内容
print(r1.group(2)) #匹配life和python之间的内容
print(r1.groups()) #匹配life和python之间的内容
json
# JSON是轻量级数据交换格式
# JSON是JavaScript Object Notation的缩写
# 符合json格式的字符串,可以叫做json字符串
# 易于阅读
# 易于解析
# 网络传输效率高
import json
# json.dumps() 将python对象转换为json字符串
data = {
'name': '张三',
'age': 18,
'gender': '男'
}
s = json.dumps(data, ensure_ascii=False)
print(data)
print(data.get('name'))
print(data['age'])
print(s)
# json.loads() 将json字符串转换为python对象
json_str = '{"name": "张三", "age": 18, "gender": "男"}'# json中的字符串必须使用双引号
data = json.loads(json_str)
print(data)
print(type(data))
print(type(json_str))
print('--------------------------------------------')
json_str1 = '[{"name": "张三", "age": 18, "gender": "男"},{"name": "张三", "age": 18, "gender": "男"}]'# json中的字符串必须使用双引号
data1 = json.loads(json_str1)
print(data1)
print(type(data1))
print(data1[1].get('name'))
# json python
# odject dict
# array list
# string str
# number int/float
# true True
# false False
# null None
# json对象与json字符串
# json对象:python中的字典
# json字符串:符合json格式的字符串
# json 数据转换格式