爬虫4-正则表达式及Python的re模块

正则表达式语法:

# -*- coding: utf-8 -*-
元字符:具有固定含义的特殊符号
常用元字符:(一般一次匹配一个字符)
. 匹配除换行符以外的任意字符
\w 匹配字母数字或下划线
\s 匹配任意的空白符
\n 匹配一个换行符
\t 匹配一个制表符

^ 匹配字符串的开始
$ 匹配字符串的结尾

\W 匹配非字符或数字或下划线
\D 匹配非数字
\S 匹配非空白符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示一个组
[...] 匹配字符组中的字符
[^...] 匹配除了字符组中字符的所有字符

量词:控制前面的元字符出现的次数

\d* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

贪婪匹配和惰性匹配
.*  贪婪匹配
.*? 惰性匹配  匹配最少

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 20 23:10:49 2021

@author: WLH
"""
import re

# findall 匹配字符串中所有的符合正则的内容 返回的是列表
'''
lst = re.findall("\d+", "我的电话号是10086")
print(lst) #['10086']
lst = re.findall("\d+", "我的电话号是10086,我朋友电话号是10010")
print(lst) #['10086', '10010']
'''


# finditer  匹配字符串中所有的内容 返回的是迭代器
'''
it = re.finditer("\d+", "我的电话号是10086,我朋友电话号是10010")
# for i in it:
#     print(i)
for i in it:
    print(i.group())  
#输出结果
# 10086
# 10010
'''

# search 找到一个就返回 返回的结果是match对象,拿数据需要.group()
'''
s = re.search("\d+", "我的电话号是10086,我朋友电话号是10010")
print(s.group()) #10086
'''

# match 是从头开始匹配
'''
s = re.match("\d+", "我的电话号是10086,我朋友电话号是10010")
print(s)  # 空
s = re.match("\d+", "10086,我朋友电话号是10010")
print(s)  # 10086
'''

# 预加载正则表达式
'''obj = re.compile("\d+")
ret = obj.finditer("我的电话号是10086,我朋友电话号是10010")
for i in ret:
    print(i.group())
'''
'''输出结果:
10086
10010'''
'''
ret = obj.findall("呵呵哒,我就不信你不还我100000000")
print(ret)
'''
'''输出结果:
['100000000']'''


s="""
<div class='jay'><span id='1'>郭麒麟</span></div>
<div class='jj'><span id='2'>宋轶</span></div>
<div class='jolin'><span id='3'>大聪明</span></div>
<div class='sylar'><span id='4'>范思哲</span></div>
<div class='tory'><span id='5'>胡说八道</span></div>
"""

'''
obj = re.compile("<div class='.*?'><span id='\d'>.*?</span></div>",re.S)
#re.S能匹配换行符
result = obj.finditer(s)
for i in result:
    print(i.group())
'''
'''
obj = re.compile("<div class='.*?'><span id='\d'>(?P<wahaha>.*?)</span></div>",re.S)
#re.S能匹配换行符
result = obj.finditer(s)
for i in result:
    print(i.group("wahaha"))
'''
obj = re.compile("<div class='.*?'><span id='(?P<id>\d')>(?P<wahaha>.*?)</span></div>",re.S)
result = obj.finditer(s)
for i in result:
    print(i.group("wahaha"))
    print(i.group("id"))

正则补充:

import re
pat = re.compile("AA")  # AA为正则表达式 用来去验证其他的字符串
# m = pat.search("CBA")  # search 后的字符串 是被校验的内容
# print(m)
# m = pat.search("AACBAA")  # search 后的字符串 是被校验的内容  只查找第一个
# print(m)

# m = re.search("AA","AASS") # 前面的字符串为规则 后面的为被校验的对象
# print(m)

# print(re.findall("a","ASDaDFGAa")) # 前面的字符串为规则 后面的为被校验的对象
# print(re.findall("[A-Z]","ASDaDFGAa")) # 前面的字符串为规则 后面的为被校验的对象

# sub 替换
# print(re.sub("a","A","abcdcasd"))  # 找到a用A代替 在第三个字符串中寻找a

# 建议在正则表达式中,被比较的字符串中加上r,不要担心转义字符的问题
a = r"\aaa-\'"
print(a)  # \aaa-\'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python 爬虫中,正则表达式是非常常用的技术,可以帮助我们从网页中提取出需要的信息。下面是一些常用的正则表达式符号和方法: 1. ".":匹配任意单个字符,除了换行符。 2. "^":匹配字符串的开始位置。 3. "$":匹配字符串的结束位置。 4. "*":匹配前一个字符出现 0 次或多次。 5. "+":匹配前一个字符出现 1 次或多次。 6. "?":匹配前一个字符出现 0 次或 1 次。 7. "{m}":匹配前一个字符出现 m 次。 8. "{m,n}":匹配前一个字符出现 m 到 n 次。 9. "(...)":分组匹配,匹配括号内的表达式。 10. "[...]":匹配括号内的任意一个字符。 11. "[^...]":匹配不在括号内的任意一个字符。 12. "\d":匹配数字,等同于 [0-9]。 13. "\D":匹配非数字,等同于 [^0-9]。 14. "\s":匹配空白字符,包括空格、制表符、换行符等。 15. "\S":匹配非空白字符。 16. "\w":匹配单词字符,包括字母、数字、下划线。 17. "\W":匹配非单词字符。 在 Python 中,使用 re 模块进行正则表达式的匹配。常用的方法包括: 1. re.compile(pattern):将正则表达式编译成一个对象,提高匹配效率。 2. re.search(pattern, string):在字符串中搜索匹配正则表达式的第一个位置。 3. re.findall(pattern, string):在字符串中搜索匹配正则表达式的所有位置,并返回一个列表。 4. re.sub(pattern, repl, string):将字符串中所有匹配正则表达式的字符替换为指定的字符串。 以上是一些常用的正则表达式符号和方法,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chde2Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值