json

json存在的价值 json文件可以在任何语言之间都能解析,让数据在不同的编程语言之间都可以传输,所以json,用于不同编程语言之间的数据交流。我们在写文件保存数据时,可以先转换成json数据,方便以后的数据的回收利用。比如说我们虽然会有语言差异的限制,但是数据却是通用的。

json 数据格式要求:

有且只有一个数据;唯一的数据必须json支持的数据类型对应的数据。

json 支持的数据类型有:

数字 :10、12.3、3e3字符串 : “abc”、“\tabc\n123”布尔 : true、false空值 : null数组 : [数据1, 数据2,…]字典 :{键1:值1, 键2:值2,…}

PythonJSONdictObjectlistArraytupleArraystrStringintNumberfloatNumberTruetrueFalsefalseNonenull

注意布尔、空值的区别 转换:

json数据转Python 数据

import json

json.loads(json格式字符串)

python 数据转 json

import json

json.dumps(python格式字符串)

正则表达式

正则表达式是一种可以让复杂的字符串问题变得简单的工具。

导入

import re

语法

函数用法

函数说明re.match将正则表达式模式匹配到字符串的开头fullmatch将正则表达式模式匹配到所有字符串search在字符串中搜索是否存在模式sub替换在字符串中找到的模式的出现subn与 sub 相同,但也返回进行的替换次数split根据出现的模式拆分字符串findall查找字符串中所有出现的模式finditer返回一个迭代器,为每个匹配项生成一个 Match 对象compile将一个模式编译成一个 Pattern 对象purge清除正则表达式缓存escape反斜杠字符串中的所有非字母数字

特殊字符:

字符功能“.”匹配除换行符以外的任何字符“^”匹配字符串的开头“$”匹配字符串的结尾或字符串结尾的换行符之前“*”匹配前面 RE 的 0 个或多个(贪婪)重复。贪婪意味着它将匹配尽可能多的重复“+”匹配前面 RE 的 1 个或多个(贪婪)重复“?”匹配前面 RE 的 0 或 1(贪心)。 *?,+?,??前三个特殊字符的非贪婪版本{m,n}匹配前面 RE 的 m 到 n 次重复{m,n}?上述的非贪婪版本“\”转义特殊字符或表示特殊序列[]表示一组字符。作为第一个字符的“^”表示补集(…)匹配括号内的 RE。稍后可以在字符串中检索或匹配内容(?aiLmsux)这些字母设置了下面定义的相应标志(?:…)正则括号的非分组版本(?P…)组匹配的子字符串可以通过名称访问(?P=name)匹配名为 name 的组之前匹配的文本(?#…)一条评论;忽略(?=…)匹配 if … 匹配下一个,但不使用字符串(?!..)如果 … 下一个不匹配则匹配(?<=…)如果前面有 … 则匹配(必须是固定长度)(?

特殊序列 由“\”和下表中的一个字符组成。如果普通字符不在列表中,则生成的 RE 将匹配第二个字符

字符功能\number匹配相同编号的组的内容\A仅匹配字符串的开头\Z仅匹配字符串的末尾\b匹配空字符串,但只匹配单词的开头或结尾\B匹配空字符串,但不匹配单词的开头或结尾\d匹配任何十进制数字; [0-9]\D匹配任何非数字字符;相当于 [^\d]\s匹配任何空白字符; 相当于[ \t\n\r\f\v]\S匹配任何非空白字符;相当于 [^\s]。\w匹配任何字母数字字符;相当于 [a-z A-Z 0-9 _ ]\W匹配 \w 的补码。\\匹配文字反斜杠。

常用正则表达式大全

匹配:

匹配中文字符: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^x00-xff]

匹配空白行:ns*r

匹配HTML标记:< (S*?)[^>]*>.*?|<.*? />

匹配首尾空白字符:^s*|s*$

匹配Email地址:w+([-+.]w+)*@w+([-.]w+)*.w+ ([-.]w+)*

匹配网址URL:[a-zA-z]+://[^s]*

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

匹配国内电话号码:d{3}-d{8}|d{4}-d{7}

匹配腾讯QQ号:[1-9][0-9]{4,}

匹配中国邮政编码:[1-9]d{5} (?!d)

匹配身份证:d{15}|d{18}

匹配ip地址:d+.d+.d+.d+

数字:

   ^[1-9]d*$    //匹配正整数

   ^-[1-9]d*$   //匹配负整数

   ^-?[1-9]d*$   //匹配整数

   ^[1-9]d*|0$  //匹配非负整数(正整数 + 0)

   ^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)

   ^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数

   ^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数

   ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数

   ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$    //匹配非负浮点数(正浮点数 + 0)

   ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$   //匹配非正浮点数(负浮点数 + 0)

  

字符串:

  ^[A-Za-z]+$   //匹配由26个英文字母组成的字符串

   ^[A-Z]+$   //匹配由26个英文字母的大写组成的字符串

  ^[a-z]+$   //匹配由26个英文字母的小写组成的字符串

   ^[A-Za-z0-9]+$   //匹配由数字和26个英文字母组成的字符串

  ^w+$   //匹配由数字、26个英文字母或者下划线组 成的字符串

  

验证:

  验证用户密码:“^[a-zA-Z]w{5,17}$”

  #正确格式为:以字母开头,长度 在6-18之间,只能包含字符、数字和下划线。

  验证是否含有^%&'',;=?$"等字符:“[^%& '',;=?$x22]+”

  验证Email地址:“^w+ [-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”

  验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”

  验证电话号码:“^((d{3,4})|d{3,4}-)?d{7,8}$”

  #正确格式为:“XXXX-XXXXXXX”,“XXXX- XXXXXXXX”,“XXX-XXXXXXX”, “XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。

验证身份证号(15位或18位数字):“^d{15}|d{}18$”

验证一年的12个月:“^(0?[1-9]|1[0-2])$”

验证一个月的31天:“^((0?[1-9])|((1|2) [0-9])|30|31)$”

限制:

只能输入数字:“^[0-9]*$”

  只能输入n位的数字:“^d{n}$”

  只能输入至少n位数字:“^d{n,}$”

  只能输入m-n位的数字:“^d{m,n}$”

  只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”

  只能 输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”

  只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9] {1,3})?$”

  只能输入非零的正整数:“^+?[1-9][0-9]*$”

  只能输入非零的负整数:“^-[1-9] [0-9]*$”

  只能输入汉字:“^[u4e00-u9fa5],{0,}$”

  只能输入长度为3的字符:“^.{3}$”

  只能输入由26个英文字母组成的字符串:“^[A-Za- z]+$”

  只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”

  只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”

  只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”

  只能输入由数字、 26个英文字母或者下划线组成的字符串:“^w+$”

# 基本用法

result = re.fullmatch(r'a[MN\d]b', 'aNb')

#

result1 = re.fullmatch(r'a[^MN\d]b', 'aBb')

#

result2 = re.fullmatch(r'[1-9]\d{4,11}', '1234567')

#

# 分组

result3 = re.fullmatch(r'([A-Z]{3}\d{2})[\u4e00-\u9fa5][A-Z]{3}', 'WIN94和AWM')

result4 = re.fullmatch(r'(\d{2})([a-z])[\u4e00-\u9fa5]{2}\1\2', '98k就叫98k')

print(result4.match())

# AttributeError: 're.Match' object has no attribute 'match'

# 属性错误:'re.Match'对象没有属性'match'

result5 = re.fullmatch(r'([a-z])(\d{3})[\u4e00-\u9fa5]{2}\2', 'm416也叫416')

print(result5.span())

# (0, 9)

# 重复

message = '我今年18岁,月薪50088元,身高188,体重70公斤,8块腹肌。每年交308元的腾讯会员费。房贷每月3000元,车贷每月2288元。'

result6 = re.findall(r'\d+元', message)

# ['50088元', '308元', '3000元', '2288元']

# 捕获

result7 = re.findall(r'(\d+)元', message)

# ['50088', '308', '3000', '2288']

# 分支

mess = '我爱你,胜过我讨厌你'

result8 = re.findall(r'我([\u4e00-\u9fa5]|[\u4e00-\u9fa5]{2})你', mess)

# ['爱', '讨厌']

# 转义

result9 = re.findall(r'\\d+\.\d+', '\d.879') # ['\\d.879']

message1 = '1:萝卜:单价2元,起售份数5 2:西红柿:单价3元,起售份数5 '

result10 = re.findall(r'\d+', message1) # ['1', '2', '5', '2', '3', '5']

result11 = re.findall(r'\d+\b', message1) # ['1', '5', '2', '5']

result12 = re.findall(r'\b\d+', message1) # ['1', '2']

result13 = re.findall(r'\B\d+\B', message1) # ['2', '3']

# match()

result14 = re.match(r'\d{4}', '2022.08.09 hello, world.')

print(result14.group()) # 2022

# search()

result15 = re.search(r'\d{4}', '2022.08.09 hello, world.')

print(result15.span()) # (0, 4)

# finditer()

result16 = re.finditer(r'\d{4}', '2022.08.09 hello, world.')

print(next(result16))

#

# split()

result17 = re.split(r'\.| |,', '2022.08.09 hello,world')

# ['2022', '08', '09', 'hello', 'world']

# sub()

result18 = re.sub(r'\d', '*', '2022.08.09 hello, world.')

# '****.**.** hello, world.'

# group()

message2 = 'CHN:98, JPN:78, USA:86'

result19 = re.search(r'([A-Z]{3}):(\d{2})', message2)

print(result19.group(1)) # CHN

# (?!)

result20 = re.fullmatch(r'(?i)abc', 'ABc')

#

# (?s)

result21 = re.fullmatch(r'(?s)hello.world', 'hello\nworld')

#

好文推荐

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: