Python 单引号、双引号和三引号混用时一定要注意!!!

Python 单引号、双引号和三引号混用时一定要注意!!!

  • 写在前面
    • 一、都是正则表达式惹
    • 二、在代码中理解吧(很简单的,看看就知道了)
      • (1)单引号
      • (2)双引号
      • (3)三单引号和三双引号
    • 三、总结

写在前面

在练习爬虫时,单引号和双引号在一起使用,结果就出问题了,特此去深入解了一下单引号、双引号和三引号的用法。

一、都是正则表达式惹

  正则表达式:  
       用 r'
  • 时,匹配结果: data-field='{"id":6244983838,"author_name":"AOTEMAN\u51f9\u51f8\u6f2b","author_nickname":null,"author_portrait":"6bd6414f54454d414ee587b9e587b8e6bcabdeb3","first_post_id":127388914159,"reply_num":44,"is_bakan":null,"vid":"","is_good":null,"is_top":null,"is_protal":null,"is_membertop":null,"is_multi_forum":null,"frs_tpoint":null}' data-tid='6244983838' data-thread-type 问题:为什么不在之前的“ =" ”就停下来呢? 由此走上了疯狂搜索单引号和双引号区别的不归路。。。。。。其实挺简单。
  • 二、在代码中理解吧(很简单的,看看就知道了)

    (1)单引号

    代码食用:.

    # -*- coding:utf-8 -*-
    
    import re
    
    # 单引号中有单引号和双引号,即 'AAA"BBB"\'CCC"DDD"'
    # str1 是单引号(')包裹的一个字符串,其里面有3个双引号("),其中有1个单引号('),但由于最外层是单引号,所以此时该单引号需要用到转义字符(\)转义
    str1 = 'a="aaa" b="bbb" \' c="ccc"'
    
    pattern1 = re.compile('="',re.S)
    pattern2 = re.compile('=\"',re.S)
    pattern3 = re.compile("='",re.S)
    pattern4 = re.compile("=\'",re.S)
    
    result1 = re.findall(pattern1,str1)
    result2 = re.findall(pattern2,str1)
    result3 = re.findall(pattern3,str1)
    result4 = re.findall(pattern4,str1)
    
    print result1
    print result2
    print result3
    print result4
    
    匹配结果:
    [’="’, ‘="’, ‘="’]
    [’="’, ‘="’, ‘="’]
    []
    []
    从结果可以说明:

    1.当单引号中存在单引号时,内部的单引号需要使用转义字符,要不然就会报错;
    2.当单引号中存在双引号时,双引号可以不用加转义字符,默认双引号为普通的字符,反之亦然。

    (2)双引号

    代码食用:.

    # -*- coding:utf-8 -*-
    
    import re
    
    # 双引号中有单引号和双引号,即 "AAA\"BBB\"'CCC\"DDD\""
    # str2 是单引号(')包裹的一个字符串,其里面有3个双引号("),其中有1个单引号('),但由于最外层是单引号,所以此时该单引号需要用到转义字符(\)转义
    str2 = "a=\"aaa\" b=\"bbb\" ' c=\"ccc\""
    
    pattern5 = re.compile('="',re.S)
    pattern6 = re.compile('=\"',re.S)
    pattern7 = re.compile("='",re.S)
    pattern8 = re.compile("=\'",re.S)
    
    result5 = re.findall(pattern1,str2)
    result6 = re.findall(pattern2,str2)
    result7 = re.findall(pattern3,str2)
    result8 = re.findall(pattern4,str2)
    
    print result5
    print result6
    print result7
    print result8
    
    匹配结果:
    [’="’, ‘="’, ‘="’]
    [’="’, ‘="’, ‘="’]
    []
    []
    从结果可以说明:

    1.当双引号中存在双引号时,内部的双引号需要使用转义字符,要不然就会报错;
    2.当双引号中存在单引号时,单引号可以不用加转义字符,默认单引号为普通的字符,反之亦然;

    (3)三单引号和三双引号

    代码食用:.

    # -*- coding:utf-8 -*-
    import re
    
    str3 = "aaa\nbbb\nccc\nddd"
    
    str4 = """
        aaa
    bbb
        ccc
    ddd
            "eee"
            'fff'
    """
    
    str5 = '''
        aaa
    bbb
        ccc
    ddd
            "eee"
            'fff'
    '''
    
    print str3
    print str4
    print str5
    
    匹配结果:
    .
    Python 单引号、双引号和三引号混用时一定要注意!!!_第1张图片
    从结果可以说明:

    1.三单引号和三双引号一般用于多行注释,且print输出时保持字符串原格式输出;
    2.三单引号和三双引号均不可互相包含,及包含自己,用转义字符也不行;
    3.三单引号和三双引号均可包含单引号和双引号,并且默认单引号和双引号为普通字符;
    4.单引号和双引号均不可包含三单引号和三双引号。

    三、总结

    1.单引号和双引号都表示字符串,三引号一般用于多行注释;
    2.当单引号中有单引号或双引号中有双引号时,内部的单引号或双引号均要用转义字符转义;
    3.当单引号和双引号相互包含时,均默认对方为普通字符;
    4.三引号可包含单引号和双引号,并且默认单引号和双引号为普通字符,单引号和双引号不能包含三引号
    

    你可能感兴趣的:(Python)