• 【Python之正则表达式与JSON】


    在这里插入图片描述

    🤵‍♂️ 个人主页@老虎也淘气 个人主页
    ✍🏻作者简介:Python学习
    🐋 希望大家多多支持我们一起进步!😄
    如果文章对你有帮助的话,
    欢迎评论 💬点赞👍🏻 收藏 📂加关注

    前言:

    在当今快速发展的技术领域,Python已经成为了许多开发者首选的编程语言之一。其简洁而强大的语法使其在各种领域都有着广泛的应用。本篇博客将引领你深入了解Python中正则表达式与JSON的强大组合,揭示它们如何协同工作,为开发者提供了解析和处理文本数据的高效方式。

    正则表达式是一项强大的文本匹配技术,而JSON(JavaScript Object Notation)则是一种轻量级数据交换格式,广泛应用于数据传输和配置文件中。结合这两者,你将能够以更灵活的方式处理和提取文本数据,为你的项目增添更多可能性。让我们一同探索如何使用Python中的正则表达式与JSON来解决实际问题,提高代码的可读性和可维护性。

    Python之正则表达式与JSON

    1、定义

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

    可以快速检索文本,实现一些替换文本的操作

    a = ‘C|C++|C#|Python|Javascript’
    print(a.index('Python')> -1)
    print('Pythin' in a)
    
    • 1
    • 2
    • 3
    import re
    a = ‘C|C++|C#|Python|Javascript’
    r = re.findall('Python', a)     #返回一个列表
    if len(r) > 0:
    	print("字符串中包含Pyython")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    import re
    a = ‘C0C++4C#6Python1Javascript’
    r = re.findall('\d',a)    #正则表达式中用“\d”统配数字
    print(a)
    
    • 1
    • 2
    • 3
    • 4

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

    import re
    a = ‘C0C++4C#6Python1Javascript’
    r = re.findall('\D',a)    #正则表达式中用“\D”匹配所有的非数字
    print(a)
    
    • 1
    • 2
    • 3
    • 4

    字符集

    import re
    a = 'abc,acc,adc,aec,afc,ahc'
    r = re.findall('a[cf]c',s)    #匹配出acf或afc
    print(r)
    
    • 1
    • 2
    • 3
    • 4
    import re
    a = 'abc,acc,adc,aec,afc,ahc'
    r = re.findall('a[^cf]c',s)    #匹配出非acf和非afc
    print(r)
    
    • 1
    • 2
    • 3
    • 4
    import re
    a = 'abc,acc,adc,aec,afc,ahc'
    r = re.findall('a[c-f]c',s)    #匹配出a[c,d,e,f]c
    print(r)
    
    • 1
    • 2
    • 3
    • 4

    概况字符集

    import re
    a = ‘C0C++4C#6Python1Javascript’
    r = re.findall('\d',a)    #正则表达式中用“\d”统配数字
    print(a)
    
    import re
    a = ‘C0C++4C#6Python1Javascript’
    r = re.findall('[0-9]',a)    #正则表达式中用“\d”统配数字等价于[0-9]
    print(a)
    
    
    
    ```python
    import re
    a = ‘C0C++4C#6Python1Javascript’
    r = re.findall('\w',a)    #正则表达式中用“\w”匹配所有的数字字母
    print(a)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    "\w" 单词字符集,可以匹配大小写字母,数字和_     等价于[A-Za-z0-9_]
    “\W” 非单词字符集 &
    “\s” 空白字符 包括空格,\t,\n,\r
    “\S”  匹配非空白字符
    . 匹配除\n以外的所有字符
    
    • 1
    • 2
    • 3
    • 4
    • 5

    数量词

    import re
    a ='python 1111java678php'
    r = re.findall('[a-z]{3}',a)    #匹配连续的a-z的三个字符
    print(r)
    
    
    import re
    a ='python 1111java678php'
    r = re.findall('[a-z]{3,6}',a)    #匹配连续的a-z的3到6个字符
    print(r)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    贪婪与非贪婪 尽可能匹配最大值

    import re
    a ='python 1111java678php'
    r = re.findall('[a-z]{3}',a)    #匹配连续的a-z的三个字符
    print(r)
    
    结果:
    ['python','java','php']     由于贪婪
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    非贪婪模式,大括号后加?

    import re
    a ='python 1111java678php'
    r = re.findall('[a-z]{3,6}?',a)    #非贪婪模式匹配
    print(r)
    
    结果:
    ['pyt’,hon','jav','php']     #由于非贪婪只匹配3个字符
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    *  匹配*前面的字符0次或无数次
    +  匹配*前面的字符1次或无数次
    ? 匹配*前面的字符0次或1
    • 1
    • 2
    • 3

    边界匹配

    import re 
    a = '100001'
    r = re.findall('\d{4,8}',qq)   #匹配4到8位数字
    print(r)
    
    import re 
    a = '100001'
    r = re.findall(^'\d{4,8}$',qq)   #边界匹配
    print(r)
    
    import re 
    a = '10000000001'
    r = re.findall(^'000$',qq)   #边界匹配
    print(r)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    import re
    a = 'PythonPythonPythonPythonPythonPython'
    r = re.findall('(Python){3}',a)
    print(r)
    
    • 1
    • 2
    • 3
    • 4
    import re
    lanuage = 'PythonC#JavaPHP'
    r = re.findall(‘c#.{1}’,lanuage,re.I |re.S)   
    print(r)
    
    re.I 忽略大小写   re.S 改变.的功能
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    re.sub

    import re 
    lanuage = 'PythonC#JavaPHP'
    r = re.sub(‘C#’,'GO',lanuage,1)
    print(r)
    # r = re.sub(‘需要被替换的字符’,‘替换后的字符',lanuage,被替换的次数(1表示1次,0表示无数次))
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    import re 
    lanuage = 'PythonC#JavaPHP'
    r = lanuage.replace(‘C#’,'GO')
    print(r)
    
    • 1
    • 2
    • 3
    • 4
    import re 
    lanuage = 'PythonC#JavaPHP'
    def convert(value):
    	pass
    # 先匹配C#,将c#作为参数传给convert()函数,再将返回值用于替换C#
    r = re.sub(‘C#’,convert,lanuage)
    print(r)
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    import re
    s = 'ABC3721D86'
    r = re.match('\d',s)    
    #从字符串首字母开始匹配,第一个字符不符合,则返回空
    print(r)
    r1 = re.search('\d',s)
    # 搜索整个字符串,首字母对匹配不影响
    print(r1)
    # 他们都只匹配一次
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    group()函数

    span()函数

    # 获取life和python中间的内容
    import re
    s = 'life is short,i use python'
    r = re.search('life.*python',s)
    print(r.gruop())
    group(0)默认返回完整匹配结果,要通过组号访问,需要从group(1)开始
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    import re
    s = 'life is short,i use python, i love python'
    r = re.search('life(.*)python(.*)python',s)
    print(r.gruop(0))
    print(r.gruop(1))
    print(r.gruop(2))
    # print(r.group(0,1,2))
    print(r.groups())    #只会返回之间的字符串
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    JSON
    javascript 对象标记

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

    JSON字符串,符合json格式的字符串

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

    json的载体,json字符串

    import json
    # json_str = "{'name':'qiyue','age':18}"    #错误,json字符串规定用“”
     json_str = '{"name":"qiyue","age":18}'    #json object
    student = json.loads(json_str)
    print(type(student))
    print(student)
    print(student['name'])
    print(student['age'])
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    import json
    
    json_str = '{"name":"qiyue","age":18,"flag":false},{"name":"qiyue","age":18}'
    student = json.loads(json_str)
    print(type(student))
    print(student)
    从字符串到语言的数据类型的转换,反序列化
    
    
    
    序列化
    import json
    studeht = [		{"name":"qiyue","age":18,"flag":false},		{"name":"qiyue","age":18}]
    json_str = json.dumps(student)
    print(json_str)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    json        python
    object      dict
    array 		list
    string 		str 
    
    • 1
    • 2
    • 3
    • 4
    json对象 json   json字符串
    javascript    ECMSCRIPT规范和标准的实现
    
    
    • 1
    • 2
    • 3

    实际应用场景:

    在现代软件开发中,正则表达式与JSON的强强联合在各种实际应用场景中发挥着关键作用。让我们深入探讨其中一个具体的应用场景:从Web API响应中提取和解析数据。

    背景:
    假设你正在开发一个Web应用,需要从一个外部API获取数据以展示在你的应用界面上。这个API返回的数据通常以JSON格式呈现,而你需要从这些数据中提取特定的信息以满足你的应用需求。

    解决方案:

    正则表达式用于初步提取: 你可以使用正则表达式从API响应文本中初步提取出所需的JSON数据。例如,你可能需要匹配特定字段或模式,以便获取关键信息。

    import re
    api_response = "{'name': 'John', 'age': 30, 'city': 'New York'}"
    pattern = r"'name':\s*'(\w+)'"
    match = re.search(pattern, api_response)
    if match:
        extracted_name = match.group(1)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    JSON解析进行深度提取: 一旦你从响应中提取到JSON字符串,接下来可以使用Python的json模块解析它,以便更深入地提取和处理数据。

    import json
    json_data = json.loads(extracted_json_string)
    user_name = json_data['name']
    
    
    • 1
    • 2
    • 3
    • 4

    应用数据于Web界面: 最终,你可以将提取到的数据应用于你的Web应用界面,呈现给用户。这可能包括显示用户的姓名、年龄和所在城市等信息。

    这个实际场景突显了正则表达式与JSON的协同作用,正则表达式用于初步提取,而JSON解析则用于深度提取和结构化数据。这种组合使得从外部API获取数据变得灵活、高效,为开发者提供了在实际项目中应对不同数据源的能力。

    结尾:

    通过本文的学习,我们深入了解了Python中正则表达式与JSON的应用。这种不仅仅是技术层面的炫技,更是在处理文本数据时提供的一种高效、灵活的解决方案。无论是在数据清洗、信息提取还是其他文本处理任务中,正则表达式与JSON都能为你的代码注入更多的便利性。

    希望本文能够为你在Python开发中的文本处理领域提供新的思路和实用技巧。通过深入理解正则表达式和JSON,你将更加熟练地应对各种文本数据的处理挑战,使你的代码更加健壮、高效。让我们在Python的世界里,用正则表达式与JSON的强强组合,创造出更加优雅而富有表现力的代码吧!

    在这里插入图片描述

  • 相关阅读:
    配置Sentinel 控制台
    浏览器渲染原理以及重排与重绘
    星系炸弹(蓝桥杯真题填空题)
    HTTP请求交互基础(基于GPT3.5,持续更新)
    信创操作系统--麒麟Kylin桌面版(项目六 文档处理:输入法、WPS、文本编辑器)
    一个help函数解决了python的所有文档信息查看
    持续更新ChatGPT商业运营网站程序源码,支持Midjourney绘画Dalle3绘画,多种语音对话+suno-ai音乐生成+TTS语音对话+支持GPTs
    十七、C语言内存函数
    实现el-table打印功能,样式对齐,去除滚动条
    java 中汉字转拼音
  • 原文地址:https://blog.csdn.net/m0_66106755/article/details/127795686