在练习爬虫时,单引号和双引号在一起使用,结果就出问题了,特此去深入解了一下单引号、双引号和三引号的用法。
正则表达式:
用 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
问题:为什么不在之前的“ =" ”就停下来呢?
由此走上了疯狂搜索单引号和双引号区别的不归路。。。。。。其实挺简单。
代码食用:
.
# -*- 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.当单引号中存在双引号时,双引号可以不用加转义字符,默认双引号为普通的字符,反之亦然。
代码食用:
.
# -*- 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.当双引号中存在单引号时,单引号可以不用加转义字符,默认单引号为普通的字符,反之亦然;
代码食用:
.
# -*- 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.三引号可包含单引号和双引号,并且默认单引号和双引号为普通字符,单引号和双引号不能包含三引号