python爬虫学习系列之正则、bs4、xpath、jsonpath
正则
正则规则:
单字符:
.:除换行符外的所有字符
[]:[aoe]a,o,e之中的一个;[a-w]a到w之间任意一个字符
\d:数字[0-9]
\D:非数字
\w:数字,字母,下划线,中文
\W:非\w
\s:所有的空白字符
\S:所有的非空白
数量修饰:
*:任意多次,大于等于0次
+:至少一次,>=1
?:可有可无,0次或者1次
{
m}:固定m次
{
m,}:至少m次
{
m,ne}:至少m次,最大n次
边界
\b
\B
$:以某某开头
^:以某某结尾
分组:
():(ab){
4}视为一个整体,
():子模式 \组模式 \1,\2
贪婪模式:
.*?
.+?
match :只从最开始找
search:从任意位置找
findall:找所有
re.sub(正则表达式,替换的内容,查找的字符串)
import re
string='<p><div><span>猪八戒</span></div></p>'
pattern=re.compile(r'<(\w+)><(\w+)>\w+</\2></\1>')
ret=pattern.search(string)
print(ret)
#输出:<re.Match object; span=(3, 30), match='<div><span>猪八戒</span></div>'>
string='<p><div><div>猪八戒<div></div></p>'
pattern=re.compile(r'<div>.*</div>')
# pattern=re.compile(r'<div>.*?</div>')
ret=pattern.search(string)
print(ret)
#输出:<re.Match object; span=(3, 27), match='<div><div>猪八戒<div></div>'>
# re.I:忽略大小写
# re.M:多行匹配
# re.S:单行匹配
string='''hate is a beautiful feel
love you
love
love '''
pattern=re.compile(r'^love',re.M)
ret=pattern.findall(string)
print(ret)
#输出:['love', 'love', 'love']
string1='''<div>沁园春-雪
北国风光
千里冰封
万里雪飘
望长城内外
惟余莽莽
大河上下
顿失滔滔
山舞银蛇
原驰蜡象
欲与天公试比高
</div>'''
pattern=re.compile(r'<div>(.*?)</div>',re.S)
ret=pattern.findall(string1)
print(ret)
#输出:['沁园春-雪\n北国风光\n千里冰封\n万里雪飘\n望长城内外\n惟余莽莽\n大河上下\n顿失滔滔\n山舞银蛇\n原驰蜡象\n欲与天公试比高\n']
# match :只从最开始找
# search:从任意位置找
# findall:找所有
# re.sub(正则表达式,替换的内容,查找的字符串)
string ='i love you,you love me'
pattern=re.compile(r'love')
ret=re.sub(pattern,'hate',string)
print(ret)
#输出:i hate you,you hate me
ret=re.sub(r'love','hate',string)
print(ret)
#输出:i hate you,you hate me
ret=pattern.sub('hate',string)
print(ret)
#输出:i hate you,you hate me
print(string)