Python11正则表达式与JSON

Q:什么是正则表达式

A:

what

一个特殊的字符序列,一个字符串是否与所设定的字符序列相匹配

why

灵魂在于规则

who

正则表达式,元字符,字符集,概括字符集,数量词

when

快速检索文本,实现一些替换文本的操作
1.检测一串数字是否为电话号码
2.检测一个字符串是否符合email
3.把一个文本里制定的单词替换为另一个单词

how
正则表达式 寻找字符
#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

正则表达式 其它函数re.match/re.search
#从字符串开始处开始匹配,然后将匹配的结果返回
import re
字符串1 = ''

r = re.match('查找字符串段', 字符串1)
#返回位置
r.span()
#返回数值
r.group()

#从字符串内搜索出第一个匹配的字符串,然后将匹配的结果返回
import re
字符串1 = ''

r = re.search('查找字符串段', 字符串1)
#返回位置
r.span()
#返回数值
r.group()

详情看举例11

正则表达式 group
'''
正则表达式''内部每个()代表一个组,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

how much

系统自带的检索方式

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 ')

Q:什么是JSON

A:

what

JavaScript Object Notation JavaScript对象标记
一种轻量级的数据交换格式
一种数据格式
中间数据类型,不同类型语音之间的数据转换
字符串是JSON的载体
REST服务的标准格式

why

易于阅读
易于解析
网络传输效率高
跨语言交换数据

who

WCCC组织

where

网站后台向浏览器传输数据
跨语言从网站后台向平台传输数据

how

JSON和Python数据类型的转换
Python11正则表达式与JSON_第1张图片
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

how much

举例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}]

你可能感兴趣的:(Python11正则表达式与JSON)