zoukankan      html  css  js  c++  java
  • Python的正则表达式与JSON

    Python的正则表达式需要导入re模块

     菜鸟教程:http://www.runoob.com/python/python-reg-expressions.html

    官方文档:https://docs.python.org/3.6/library/re.html

    一译中文:https://yiyibooks.cn/xx/python_352/library/re.html

    常用正则表达式:https://www.cnblogs.com/Akeke/p/6649589.html

    ===========================================================

    1.方法

      findall(pattern, string, flags=0):

    pattern 匹配的正则表达式
    string 要匹配的字符串。
    flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

        flags:

    修饰符描述
    re.I 使匹配对大小写不敏感
    re.L 做本地化识别(locale-aware)匹配
    re.M 多行匹配,影响 ^ 和 $
    re.S 使 . 匹配包括换行在内的所有字符
    re.U 根据Unicode字符集解析字符。这个标志影响 w, W, , B.
    re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

        flags可以指定多个  例:re.I | re.S   两者是且的关系 

    sub(pattern, repl, string, count=0, flags=0):检索和替换

    参数:

    • pattern : 正则中的模式字符串。
    • repl : 替换的字符串,也可为一个函数。
    • string : 要被查找替换的原始字符串。
    • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

       repl可以为函数 很强大 例:

    import re
    s = 'A8C3721D86'
    def convert(value):
            matched = value.group() #拿到具体的值
            if int(matched) >= 6:
                return '9'
            else:
                return '0'
    r = re.sub('d',convert,s)
    print(r)
    ----------------------------------------------------------------
    A9C0900D99

          #group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0)

    match(pattern, string, flags=0):re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

    search(pattern, string, flags=0): re.search 扫描整个字符串并返回第一个成功的匹配。

    2.元字符 

        

       d :匹配一个数字字符

       D:匹配一个非数字字符

       w:匹配字母数字及下划线 ,字母:单词字符(的只能匹配a-z A-Z 0-9 _)

       W:匹配非字母数字及下划线,(&, , 等都算作非字母数字及下划线)

       s:匹配任意空白字符,等价于 [ f].(制表符都算作空白字符 , , 等)

       S:匹配任意非空字符

       [...]:用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'

    import re
    s = 'abc,acc,adc,aec,afc,ahc'
    r = re.findall('a[cf]c',s)
    print(r)
    
    ----------
    ['acc', 'afc']

      [^...]:不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符

      数量词

      re{n}:让前面的re表达式匹配多次,例:

    import re
    s = 'python 11111java678php'
    r = re.findall('[a-z]{3}',s)
    print(r)
    --------------------------------------------------
    ['pyt', 'hon', 'jav', 'php']

      re{ n, m}:匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式(够多则使用m值)

    import re
    s = 'python 11111java678php'
    r = re.findall('[a-z]{3,6}',s)
    print(r)
    -----------------------------------------------------
    ['python', 'java', 'php']

      re{ n, m}?:可以转换为非贪婪方式(使用n值)

      re*:匹配0个或多个的表达式。(*前面的字符)

    import re
    s = 'pytho0python1pythonn2'
    r = re.findall('python*',s)
    print(r)
    -------------------------------------------------
    ['pytho', 'python', 'pythonn']

      re+:匹配1个或多个的表达式。

      re?:匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式(有一个也匹配,忽略后面多的re)

    import re
    s = 'pytho0python1pythonn2'
    r = re.findall('python?',s)
    print(r)
    ----------------------------------------------
    ['pytho', 'python', 'python']

      . :匹配任意字符,除了换行符 ,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。

     边界匹配

      ^:匹配字符串的开头

      $:匹配字符串的末尾

    import re
    qq = '10000000001'
    r = re.findall('d{4,8}',qq)
    print("d{4,8} : " + str(r))
    
    r2 = re.findall('^d{4,8}',qq)
    print('^d{4,8}: '+str(r2))
    
    r3 = re.findall('d{4,8}$',qq)
    print('d{4,8}$: '+ str(r3))
    
    r4 = re.findall('^d{4,8}$',qq) #匹配整个字符串
    print('^d{4,8}$: '+ str(r4))
    
    r5 = re.findall('^000',qq) #^匹配字符串开头,则开头必须000  ;$同理
    print('^000: '+ str(r5))
    -----------------------------------------------------------------------------
    d{4,8} : ['10000000']
    ^d{4,8}: ['10000000']
    d{4,8}$: ['00000001']
    ^d{4,8}$: []
    ^000: []

     

    组 

      (re):匹配括号内的表达式,也表示一个组

    import re
    qq = 'PythonPythonPythonPythonPythonPythonPython'
    r = re.findall('(Python){3}',qq)
    print(r)
    ------------------------------------------------------------------------
    ['Python', 'Python']

    ========================================================================

    JSON

    导入json模块

    反序列化过程

    import json
    json_str = '{"name":"zhangsan","age":18}' #这里的json 中的字符串类型必须用"" ,因为里面用了"",所以外面需要用''
    student = json.loads(json_str)
    print(type(student))
    print(student)
    -----------------------------------------------------------------------
    <class 'dict'>
    {'name': 'zhangsan', 'age': 18}
    import json
    json_str = '[{"name":"zhangsan","age":18},{"name":"lisi","age":19}]'
    student = json.loads(json_str)
    print(type(student))
    print(student)
    --------------------------------------------------------------------
    <class 'list'>
    [{'name': 'zhangsan', 'age': 18}, {'name': 'lisi', 'age': 19}]

    序列化过程

    import json
    student = [{'name':'zhangsan','age':18,'flag':False},{'name':'lisi','age':18,'flag':True}]
    json_str = json.dumps(student)
    print(type(json_str))
    print(json_str)
    -----------------------------------------------------------------------------
    <class 'str'>
    [{"name": "zhangsan", "age": 18, "flag": false}, {"name": "lisi", "age": 18, "flag": true}]

    JSON中的数据类型和python中的对应关系:

                                                    

    JSON对象:

    JSON:

    JSON字符串:

       

  • 相关阅读:
    php socket 读取缓存区域
    PHP依赖注入的作用
    谷歌浏览器调试文字都变成font标签的解决方法
    php socket 同步异步堵塞非堵塞的区别
    css3中background-size中的cover与contain的区别
    css3 line-height:0的作用
    RDD的创建方式
    Serializable序列化操作解惑
    SparkCore分布式计算模拟
    spark不同环境下计算pi值
  • 原文地址:https://www.cnblogs.com/jokerq/p/8698092.html
Copyright © 2011-2022 走看看