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

本文详细解析了Python中单引号、双引号和三引号的使用规则,包括它们在字符串定义、正则表达式匹配及多行注释中的应用,强调了不同情况下引号的转义需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

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

一、都是正则表达式惹

  正则表达式:  
       用 r'<li class=" j_thread_list clearfix"(.*?)=".*?'  去匹配
       <li class=" j_thread_list clearfix" data-field="{&quot;id&quot;:6244983838,&quot;author_name&quot;:&quot;AOTEMAN\u51f9\u51f8\u6f2b&quot;,&quot;author_nickname&quot;:null,&quot;author_portrait&quot;:&quot;6bd6414f54454d414ee587b9e587b8e6bcabdeb3&quot;,&quot;first_post_id&quot;:127388914159,&quot;reply_num&quot;:44,&quot;is_bakan&quot;:null,&quot;vid&quot;:&quot;&quot;,&quot;is_good&quot;:null,&quot;is_top&quot;:null,&quot;is_protal&quot;:null,&quot;is_membertop&quot;:null,&quot;is_multi_forum&quot;:null,&quot;frs_tpoint&quot;:null}" data-tid="6244983838" data-thread-type="0" data-floor="1" '="">
       时,匹配结果:                          
       data-field='{&quot;id&quot;:6244983838,&quot;author_name&quot;:&quot;AOTEMAN\u51f9\u51f8\u6f2b&quot;,&quot;author_nickname&quot;:null,&quot;author_portrait&quot;:&quot;6bd6414f54454d414ee587b9e587b8e6bcabdeb3&quot;,&quot;first_post_id&quot;:127388914159,&quot;reply_num&quot;:44,&quot;is_bakan&quot;:null,&quot;vid&quot;:&quot;&quot;,&quot;is_good&quot;:null,&quot;is_top&quot;:null,&quot;is_protal&quot;:null,&quot;is_membertop&quot;:null,&quot;is_multi_forum&quot;:null,&quot;frs_tpoint&quot;: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
匹配结果:
.
结果
从结果可以说明:

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

三、总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值