一个特殊的字符序列,一个字符串是否与所设定的字符序列相匹配
灵魂在于规则
正则表达式,元字符,字符集,概括字符集,数量词
快速检索文本,实现一些替换文本的操作
1.检测一串数字是否为电话号码
2.检测一个字符串是否符合email
3.把一个文本里制定的单词替换为另一个单词
#print(r)输出一个寻找出的字符串的列表
import re
字符串1 = ''
r = re.findall('正则表达式',字符串1)
'''
'字符串'是普通字符,'\d'元字符,概括字符集
\d代表数字<=>[0-9]
\D代表不是数字的<=>[^0-9]
\w代表数字和字母<=>[A-Za-z0-9_](单词字符集)
\W代表非单词字符<=>[^A-Za-z0-9_](非单词字符集)
\s代表转义字符集(转义字符集包括空格)
.表示匹配除换行符(\n)以外的其它所有字符
'''
import re
字符串1 = ''
r = re.findall('\d',字符串1)
import re
字符串1 = ''
r = re.findall('字首[字中]字末',字符串1) #加^则不含字中
详情看举例3
#Python默认贪婪,即匹配更多
import re
字符串1 = ''
r = re.findall('[a-z]{数字1}',字符串1)
#表示以数字1个字符为一组,成组出现的字符,多出不算
r = re.findall('[a-z]{数字1, 数字2}',字符串1)
#表示以数字1-数字2个字符为一组,成组出现的字符
r = re.findall('[a-z]{数字1, 数字2}?',字符串1)
#非贪婪模式匹配
#表示以数字1个字符为一组,成组出现的字符
详情看举例4
'''
*匹配0次或者无限多次
+匹配1次或者无限多次
?匹配0次1次
'''
import re
字符串1 = ''
r = re.findall('字符串1*',字符串1)
#表示最后一个字符匹配0到无数多次
r = re.findall('字符串1+',字符串1)
#表示最后一个字符匹配1到无数多次
r = re.findall('字符串1?',字符串1)
#表示最后一个字符匹配0到1次
详情看举例5
'''
匹配完整的表达式
^从字符串的最前端开始匹配
$从字符串的最末端结束匹配
'''
import re
字符串1 = ''
r = re.findall('^正则表达式$',字符串1)
详情看举例6
'''
匹配一个字符串重复n次
()表示整个字符串的重复
'''
import re
字符串1 = ''
r = re.findall('(字符串段){n}',字符串1)
详情看举例7
'''
第三个参数flags
re.I忽略大小写
re.S表示元字符.将匹配所有字符
多个模式之间用|隔开,表示且的关系
'''
import re
字符串1 = ''
r = re.findall('字符串段', 字符串1, re.I | re.S)
详情看举例8
'''
re.sub替换
n表示替换几遍,默认值为0,0时为无限替换
和字符串1.replace('查找字符串段', '替换字符串段')的区别是,replace只能生成新的字符串,正则替换是替换原有字符串
替换字符串段可以是一个函数
'''
import re
字符串1 = ''
def 函数1(数值1):
matched = 数值1.group()
return 对matched的操作
r = re.sub('查找字符串段', '替换字符串段'或函数, 字符串1, 数字n)
详情看举例9/10
#从字符串开始处开始匹配,然后将匹配的结果返回
import re
字符串1 = ''
r = re.match('查找字符串段', 字符串1)
#返回位置
r.span()
#返回数值
r.group()
#从字符串内搜索出第一个匹配的字符串,然后将匹配的结果返回
import re
字符串1 = ''
r = re.search('查找字符串段', 字符串1)
#返回位置
r.span()
#返回数值
r.group()
详情看举例11
'''
正则表达式''内部每个()代表一个组,group()内部可以写组号,0记录的是完整访问结果,从1开始
r.group(0, 1, 2)可以返回多个,以元组形式
r.groups()表示返回除完整返回外的多个,以元组形式
'''
import re
字符串1 = ''
r = re.search('查找字符串段前(.*)查找字符串段后', 字符串1)
#返回数值
r.group(0, 1, 2)
r.groups()
详情看举例12
系统自带的检索方式
a = 'C|C++|Java|Python|C#|JavaScript'
print(a.index('Python')>-1)
print('Python' in a)
正则表达式中()[]{}的关系
()代表且的关系,表示分组
[]代表或的关系
{}代表组数
举例1:正则表达式的应用
import re
a = 'C|C++|Java|Python|C#|JavaScript'
r = re.findall('Python',a)
if len(r) > 0:
print('字符串包含Python')
else:
print('No')
输出
字符串包含Python
举例2:正则表达式 数字
import re
a = 'C2C++4Java6Python7C#8JavaScript'
r = re.findall('\d',a)
print(r)
输出
[‘2’, ‘4’, ‘6’, ‘7’, ‘8’]
举例3:正则表达式 字符集
import re
a = 'abc, acc, adc, aec, afc, ahc'
r = re.findall('a[cf]c',a)
#r = re.findall('a[^cf]c',a)即找不是cf中间字的
#r = re.findall('a[c-f]c',a)即找含有c到f所有中间字的
print(r)
输出
[‘acc’, ‘afc’]
或
[‘abc’, ‘adc’, ‘aec’, ‘ahc’]
或
[‘acc’, ‘adc’, ‘aec’, ‘afc’]
举例4:正则表达式 数量词
import re
a = 'abca4cca111dcae576cafca4546hc'
r = re.findall('[a-z]{3}',a)
#r = re.findall('[a-z]{2,5}',a)
#r = re.findall('[a-z]{2,5}?',a)
print(r)
输出
[‘abc’, ‘cca’, ‘dca’, ‘caf’]
或
[‘abca’, ‘cca’, ‘dcae’, ‘cafca’, ‘hc’]
或
[‘ab’, ‘ca’, ‘cc’, ‘dc’, ‘ae’, ‘ca’, ‘fc’, ‘hc’]
举例5:正则表达式 *+?
import re
a = 'pytho0python1pythonn2'
r = re.findall('python*', a)
#r = re.findall('python+', a)
#r = re.findall('python?', a)
print(r)
输出
[‘pytho’, ‘python’, ‘pythonn’]
或
[‘python’, ‘pythonn’]
或
[‘pytho’, ‘python’, ‘python’]
举例6:正则表达式 边界匹配
import re
qq = '100001'
r = re.findall('^\d{4,8}$', qq)
print(r)
输出
[‘100001’]
举例7:正则表达式 组
import re
a = 'pythonpythonpythonpythonpythonpython'
r = re.findall('(python){3}', a)
print(r)
输出
[‘python’, ‘python’]
举例8:正则表达式 模式参数
import re
a = 'PythonC#\nJavaPHP'
r = re.sub('c#.{1}', a, re.I | re.S)
print(r)
输出
[‘C#\n’]
举例9:正则表达式 正则替换
import re
a = 'PythonC#JavaPHPC#C#C#C#C#'
def convert(value):
matched = value.group()
return '!!' + matched + '!!'
r = re.sub('C#', convert, a, 3)
print(r)
输出
Python!!C#!!JavaPHP!!C#!!!C#!!C#C#C#
举例10:正则表达式 把函数作为参数传递
import re
a = 'A8C3721D86'
def convert(value):
matched = value.group()
if int(matched) >= 6:
return '9'
else:
return '0'
r = re.sub('\d', convert, a)
print(r)
输出
A9C0900D99
举例11:正则表达式 其它函数re.match/re.search
import re
a = '8C3721D86'
r = re.match('\d', a)
print(r)
print(r.span())
print(r.group())
输出
(0, 1)
8
import re
a = 'A8C3721D86'
r = re.search('\d', a)
print(r)
print(r.span())
print(r.group())
输出
(1, 2)
8
举例12:正则表达式 group
import re
a = 'life is short,i use Python'
r = re.search('life(.*)Python', a)
print(r.group(1))
输出
is short,i use
import re
a = 'life is short,i use Python'
r = re.findall('life(.*)Python', a)
print(r)
输出
[’ is short,i use ']
import re
a = 'life is short,i use Python, i love Python'
r = re.search('life(.*)Python(.*)Python', a)
print(r.group(0))
print(r.group(1))
print(r.group(2))
#print(r.group(0,1,2))
#print(r.groups())
输出
life is short,i use Python, i love Python
is short,i use
, i love
或
(‘life is short,i use Python, i love Python’, ’ is short,i use ', ', i love ‘)
或
(’ is short,i use ', ', i love ')
JavaScript Object Notation JavaScript对象标记
一种轻量级的数据交换格式
一种数据格式
中间数据类型,不同类型语音之间的数据转换
字符串是JSON的载体
REST服务的标准格式
易于阅读
易于解析
网络传输效率高
跨语言交换数据
WCCC组织
网站后台向浏览器传输数据
跨语言从网站后台向平台传输数据
JSON和Python数据类型的转换
JSON字符串的一般应用
#引入模块
import json
#JSON的object格式内部字符串需要使用双引号,整体单引号引用(即引用字符串)
JSON字符串1 = '{"字符串1":"字符串2", "字符串3":数字1}'
#JSON字符串的反序列化,转换成Python的数据格式
a = json.loads( JSON字符串1)
#引入模块
import json
#JSON的array格式内部字符串需要使用双引号,整体单引号引用(即引用字符串),bool值是小写
JSON字符串1 = '[{"字符串1":"字符串2", "字符串3":数字1, "字符串7":flase},{"字符串4":"字符串5", "字符串6":数字2}] '
#JSON字符串的反序列化,转换成Python的数据格式
a = json.loads( JSON字符串1)
详情看举例1/2
Python数据的序列化,转换成JSON字符串
import json
#定义一个Python数据
a = 。。。
#Python数据的序列化,转换成JSON字符串
json.dumps(a)
详情看举例3
举例1:JSON的object格式字符串的一般应用
import json
json_str = '{"name":"qiyue", "age":18}'
a = json.loads(json_str)
print(type(a))
print(a)
print(a['name'])
print(a['age'])
输出
{‘name’: ‘qiyue’, ‘age’: 18}
qiyue
18
举例2:JSON的array格式字符串的一般应用
import json
json_str = '[{"name":"qiyue", "age":18}, {"name":"qiyue", "age":18}]'
a = json.loads(json_str)
print(type(a))
print(a)
输出
[{‘name’: ‘qiyue’, ‘age’: 18}, {‘name’: ‘qiyue’, ‘age’: 18}]
举例3:Python数据的序列化,转换成JSON字符串
import json
student = [
{'name': 'qiyue', 'age': 18, 'flag':False},
{'name': 'qiyue', 'age': 18}
]
json_str = json.dumps(student)
print(type(json_str))
print(json_str)
输出
[{“name”: “qiyue”, “age”: 18, “flag”: false}, {“name”: “qiyue”, “age”: 18}]