python 正则表达式与JSON

1,516 阅读3分钟
  1. 字符集:[cf]:匹配c或者f a[cf]c:使用a和c的界定,匹配c或者f, [c-f]:匹配c到f中的字母,[^cf]:匹配不含c或者f字母-----衍生[a-z]:可匹配所有字母, [^a-z]:匹配所有非字母,\d:匹配所有的数字

    import re #--内置字符串模块
    s = "abc,abc,adc,afc,ahc,aec,avc"
    r = re.findall("a[fc]c",s)

  2. 概括字符集:\d:0-9的数字 等价于[0-9],\D:非数字,等价于[^0-9],\w:匹配包括下划线的任何单词字符,类似但不等价于[A-Za-z0-9],这里的单词字符使用的是Unicode字符集。\W:匹配任何非单词字符,等价于[^A-Za-z0-9],\s:匹配任何不常见的字符,包括空格,制表符,换页符等价于[\f\n\r\t\v],\S:匹配任何不常见字符,等价于[^\f\n\r\t\v]
  3. 数量词:[a-z]{3,6}

    import re
    a = "python 1111java678&php"
    r = re.findall("[a-z]{3,6}",a)
    print(r) 
    输出结果: ['python', 'java', 'php']

  4. 贪婪与非贪婪:python是贪婪算法,在数量词后面加?是非贪婪匹配

     import re
    a = "python 1111java678&php"
    r = re.findall("[a-z]{3,6}?",a)====r = re.findall("[a-z]{3}",a)
    print(r) 
    输出结果: ['pyt', 'hon', 'jav', 'php']

  5. 匹配0次1次或者无限次:*表示它前面的字符0次或无限次 + 匹配它前面的字符1次或者无限次 ?匹配前面的字符0次或1次
  6. 边界匹配:^开始边界,$结束边界, {}区间 ,[0-9] [-]表示范围:从开始字符串的开头到结束来匹配

    import re
    a = "100000000"
    r = re.findall("\d{4,8}",a)
    print(r) ---[1000000000]
    import re
    a = "100000000"
    r = re.findall("^\d{4,8}$",a) #加上边界字符,是匹配一个完整的字符串
    print(r) ---[]
  7. 组:()括号里面的字符必须是且关系 [] 里面的字符是或关系

    imprt re
    a = "pythonpythonpythonpython"
    r =  re.findall("(python){3}",a)
    print(r) ----组的概念

  8. 匹配模式参数:ree.I:是忽略大小写 .:除换行符之外可以匹配所有的字符 re.S:匹配所有的字符包括换行符

    import re
    a = "python123Java php"
    r = re.findall("java",a,re.I)
    print(r)

  9. res.sub正则替换:这个内置函数的第二个参数可以是一个函数

    import re
    a = "pythonc#javac#phpc#"
    def convert(value):----value 是获取的对象
        mathod = value.group
        return "!!!"+mathod+"!!!"
    r = re.sub("c#",convert,a,1,res.I)
    print(r)
    
  10. 函数作为参数传递:

    import re
    s = "A8C3721D86"
    def convert(value):
           mathod = value.group
           if int(mathod)>=6:
                  return "9"
            else:
                  return "0"
    r = re.sub("\d",convert,s)
    print(r)

  11. search与match函数:match:从开始处就开始匹配,如果第一位就不匹配就返回None,search:从开始处开始搜索,搜索整个字符串,如果匹配就立即返回第一个对象,否则返回None :区别findall: findall返回结果是list,match与search返回对象,并且只匹配一次,无论成功与否,并且要获取对象的内容必须要用到group方法,如果哟返回位置则要使用span()方法。
  12. 分组:group()分组的概念,group(0)是返回完整的字符串,1表示第一个分组信息,2表示第二个分组的信息

    import re
    s = "life is short,i use python,i love python"
    r = re.search("life(.*)python(.*)python",s)
    print(r.group(0)) ---life is short,i use python,i love python
    print(r.group(1)) ---is short,i use
    print(r.group(2)) ---,i love
  13. 正则的建议:www.cnblogs.com/zxin/archiv…
  14. 理解JSON:


  15. JSON反序列化:json.loads进行反序列化转化,json字符串loads,转化成dict字典,jsonarray数组loads,转化成list列表,json里层里面是双引号,外面是单引号!!!

    import json
    json_str = '{"name":"lucas_li","age":23}'
    student = json.loads(json_str)
    print(student)

  16. 序列化:就是json向json字符串的方向转化,方法就是json.dumps

    import json
    student = [{"name":"lucas_li","age":23},{"name":"lucas_li","age":23,"flag":false}]
    json_str = json.dumps(student)
    print(type(json_str))
    print(json_str)
    

  17. json对象就是存在到javascript当中,json就是传输数据的一种格式,中间数据类型,json字符串就是json格式的字符串。