网站建设服务器的选择方案,新乡集团网站建设,静态网站 动态,微信商城有哪些7.网络爬虫—正则表达式详讲与实战Python 正则表达式re.match() 函数re.search方法re.match与re.search的区别re.compile 函数检索和替换检索#xff1a;替换#xff1a;findallre.finditerre.split正则表达式模式常见的字符类正则模式正则表达式模式量词正则表达式举例前言替换findallre.finditerre.split正则表达式模式常见的字符类正则模式正则表达式模式量词正则表达式举例前言 此专栏文章是专门针对网络爬虫基础欢迎免费订阅 第一篇文章《1.认识网络爬虫》获得全站热榜第一python领域热榜第一 第四篇文章《4.网络爬虫—Post请求(实战演示)》全站热榜第八欢迎阅读 欢迎大家一起学习一起成长 悲索之人烈焰加身堕落者不可饶恕。永恒燃烧的羽翼带我脱离凡间的沉沦。 Python 正则表达式
Python 正则表达式是一种用于匹配、搜索、替换文本中模式的工具。它使用特定的语法来描述一些规则这些规则可以用于匹配文本中的某些模式。通过使用正则表达式可以快速地搜索和处理大量的文本数据从而节省时间和精力。
在 Python 中正则表达式可以通过 re 模块进行操作。 Python 自1.5版本起增加了re 模块它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。re 模块也提供了与这些方法功能完全一致的函数这些函数使用一个模式字符串做为它们的第一个参数。
re.match() 函数 re.match() 函数是 Python中用于匹配字符串开头的函数。该函数尝试从字符串的开头开始匹配一个正则表达式模式如果匹配成功则返回一个匹配对象否则返回 None。 re.match(pattern, string, flags0)参数说明 pattern正则表达式模式。string要匹配的字符串。flags可选参数用于控制正则表达式的匹配方式。 匹配成功 re.match 方法返回一个匹配的对象否则返回 None。 示例代码
import re# 匹配一个以 hello 开头的字符串
pattern rhello
string hello world
match_obj re.match(pattern, string)
if match_obj:print(匹配成功)
else:print(匹配失败)输出结果为
我们可以使用 group(num) 或 groups() 匹配对象函数来获取匹配表达式。 参数说明 span() 起始位置 group()返回获取参数。 代码展示
import re
print(re.match(www, www.baidu.com).span()) # 在起始位置匹配 (0, 3)
print(re.match(com, www.baidu.com)) # 不在起始位置匹配 None运行结果
re.search方法
re.search方法是Python中re模块的一个函数用于在字符串中搜索匹配正则表达式的第一个位置并返回一个包含匹配信息的Match对象。如果没有匹配到则返回None。 该方法的语法如下
re.search(pattern, string, flags0)其中pattern为正则表达式string为要搜索的字符串flags为可选的标志用于控制正则表达式的行为。 以下是一个简单的示例演示如何使用re.search方法
import re# 定义一个正则表达式
pattern rhello# 定义一个字符串
string hello, world!# 在字符串中搜索匹配项
match_obj re.search(pattern, string)if match_obj:print(匹配成功)
else:print(匹配失败)输出结果为
匹配成功在这个示例中我们定义了一个正则表达式模式hello然后在字符串hello,world!“中搜索匹配项。由于该字符串包含hello”因此re.search方法返回了一个匹配对象。最后我们检查匹配对象是否存在以确定匹配是否成功。 re.match与re.search的区别
re.match和re.search都是Python中re模块中的函数它们的主要区别在于匹配的位置不同。
re.match只会从字符串的开头开始匹配如果在开头没有匹配到则返回None。而re.search则会搜索整个字符串只要找到第一个匹配项就会返回一个匹配对象。
以下是一个简单的示例演示re.match和re.search的区别
import re# 定义一个正则表达式
pattern rhello# 定义一个字符串
string hello, world!# 使用re.match进行匹配
match_obj re.match(pattern, string)if match_obj:print(re.match匹配成功)
else:print(re.match匹配失败)# 使用re.search进行匹配
match_obj re.search(pattern, string)if match_obj:print(re.search匹配成功)
else:print(re.search匹配失败)输出结果为
re.match匹配成功
re.search匹配成功在这个示例中我们定义了一个正则表达式模式hello然后在字符串hello, world!“中使用re.match和re.search进行匹配。由于hello出现在字符串的开头因此re.match和re.search都返回了一个匹配对象表示匹配成功。但是如果我们将字符串改为world, hello!”则re.match将返回None因为hello不在字符串的开头。 re.compile 函数
在Python中re.compile()函数是用于将正则表达式编译成一个正则表达式对象的函数。编译后的正则表达式对象可以被多次使用可以提高程序的效率。
re.compile()函数的语法如下
re.compile(pattern, flags0)参数说明 pattern要编译的正则表达式flags可选参数用于指定匹配模式具体参数参考re模块的文档 示例代码
import re# 编译正则表达式
pattern re.compile(r\d)
str hello 123 world 456# 使用正则表达式对象进行匹配
result pattern.findall(str)
print(result)输出结果
[123, 456]上面的代码中我们先使用re.compile()函数将正则表达式编译成一个正则表达式对象然后使用该对象的findall()方法进行匹配。这样可以提高程序的效率特别是在需要多次使用同一个正则表达式时。 检索和替换
Python中可以使用re模块来进行正则表达式的检索和替换。
re.sub(pattern, repl, string, count0, flags0)参数 pattern : 正则中的模式字符串。repl : 替换的字符串也可为一个函数。string : 要被查找替换的原始字符串。count : 模式匹配后替换的最大次数默认 0 表示替换所有的匹配。 检索
使用re.search()函数可以在字符串中查找匹配某个正则表达式的子串返回一个match对象。
示例代码
import restr The quick brown fox jumps over the lazy dog.
match re.search(rfox, str)if match:print(找到了, match.group())
else:print(没找到)输出结果
找到了 fox替换
使用re.sub()函数可以将字符串中匹配某个正则表达式的子串替换成指定的字符串。
示例代码
import restr The quick brown fox jumps over the lazy dog.
new_str re.sub(rfox, cat, str)print(替换前, str)
print(替换后, new_str)输出结果
替换前 The quick brown fox jumps over the lazy dog.
替换后 The quick brown cat jumps over the lazy dog.findall findall 是 Python 中 re 模块提供的一个函数用于在字符串中找到所有匹配正则表达式的子串并返回一个列表。 它的语法如下
re.findall(pattern, string, flags0)其中pattern 是正则表达式string 是要匹配的字符串flags 是可选的标志参数。findall 函数返回一个包含所有匹配子串的列表如果没有匹配到任何子串则返回一个空列表。
示例代码
import repattern re.compile(r(\d) (\d)) # 查找数字 有助于一个表达式在不同的情况下测试
result1 pattern.findall(123 abc 456)
result2 pattern.findall(123 456 abc 456 789)
print(result1)
print(result2)输出结果 re.finditer re.finditer 是 Python 中 re 模块提供的一个函数用于在字符串中找到所有匹配正则表达式的子串并返回一个迭代器。 它的语法如下
re.finditer(pattern, string, flags0)其中pattern 是正则表达式string 是要匹配的字符串flags 是可选的标志参数。finditer 函数返回一个迭代器可以迭代得到所有匹配子串的 MatchObject 对象。如果没有匹配到任何子串则返回一个空迭代器。与 findall 不同的是finditer 返回的是迭代器可以逐个获取匹配的结果而不是一次性获取全部结果。这在匹配大量文本时可以节省内存。
re.split re.split 是 Python 中 re 模块提供的一个函数用于按照正则表达式指定的模式分割字符串并返回一个列表。 它的语法如下
re.split(pattern, string, maxsplit0, flags0)其中pattern 是正则表达式string 是要分割的字符串maxsplit 是指定最大分割次数flags 是可选的标志参数。split 函数返回一个列表包含所有分割后的子串。如果没有匹配到任何子串则返回一个包含原字符串的列表。与 Python 内置的 split 函数不同的是re.split 可以按照正则表达式指定的模式进行分割例如按照空格、逗号、分号等进行分割而不仅仅是按照固定的字符进行分割。同时re.split还支持指定最大分割次数以控制分割的结果。
正则表达式模式
模式字符串使用特殊的语法来表示一个正则表达式
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。多数字母和数字前加一个反斜杠时会拥有不同的含义。标点符号只有被转义时才匹配自身否则它们表示特殊的含义。反斜杠本身需要使用反斜杠转义。由于正则表达式通常都包含反斜杠所以你最好使用原始字符串来表示它们。模式元素(如 r’\t’等价于 ‘\t’)匹配相应的特殊字符。下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数某些模式元素的含义会改变。
常见的字符类正则模式
字符类正则模式用于匹配一组特定的字符。以下是常见的字符类正则模式
1. [abc]匹配字符 a、b 或 c 中的任意一个。 2. [^abc]匹配除了字符 a、b 和 c 以外的任意字符。 3. [a-z]匹配任意小写字母。 4. [A-Z]匹配任意大写字母。 5. [0-9]匹配任意数字。 6. [a-zA-Z]匹配任意字母。 7. [a-zA-Z0-9]匹配任意字母或数字。 8. [\s]匹配任意空白字符包括空格、制表符、换行符等。 9. [\S]匹配任意非空白字符。 10. [\d]匹配任意数字等同于 [0-9]。 11. [\D]匹配任意非数字字符。 12. [\w]匹配任意字母、数字或下划线字符。 13. [\W]匹配任意非字母、数字或下划线字符。
正则表达式模式量词
正则表达式模式量词用于表示匹配次数常用的量词包括
1. *匹配前面的模式零次或多次等效于{0,}
2. 匹配前面的模式一次或多次等效于{1,}
3. ?匹配前面的模式零次或一次等效于{0,1}
4. {n}匹配前面的模式恰好n次
5. {n,}匹配前面的模式至少n次
6. {n,m}匹配前面的模式至少n次但不超过m次。例如正则表达式模式\d{3,5}表示匹配3到5个数字正则表达式模式ab*表示匹配一个或多个a后面跟零个或多个b。 正则表达式举例
1. 匹配邮箱地址的模式^[a-zA-Z0-9_-][a-zA-Z0-9_-](\.[a-zA-Z0-9_-])$
2. 匹配手机号码的模式^1[3456789]\d{9}$
3. 匹配身份证号码的模式^\d{17}[\dXx]|\d{15}$
4. 匹配IP地址的模式^((\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])$
5. 匹配URL地址的模式^[a-zA-Z]://(\w(-\w)*)(\.(\w(-\w)*))*(\?\S*)?$
6. 匹配汉字的模式^[\u4e00-\u9fa5]{0,}$
7. 匹配中文和英文的模式^[\u4e00-\u9fa5a-zA-Z]$
8. 匹配邮政编码的模式^[1-9]\d{5}$
9. 匹配日期的模式^\d{4}-\d{1,2}-\d{1,2}$
10. 匹配时间的模式^(0?\d|1\d|2[0-3]):[0-5]\d(:[0-5]\d)?$今日学习笔记到此结束感谢你的阅读如有疑问或者问题欢迎私信我会帮忙解决如果没有回那我就是在教室上课抱歉。 文章转载自: http://www.morning.xhhzn.cn.gov.cn.xhhzn.cn http://www.morning.dmjhp.cn.gov.cn.dmjhp.cn http://www.morning.c7627.cn.gov.cn.c7627.cn http://www.morning.mlfmj.cn.gov.cn.mlfmj.cn http://www.morning.ngcbd.cn.gov.cn.ngcbd.cn http://www.morning.czzpm.cn.gov.cn.czzpm.cn http://www.morning.qwpdl.cn.gov.cn.qwpdl.cn http://www.morning.hnhkz.cn.gov.cn.hnhkz.cn http://www.morning.kltsn.cn.gov.cn.kltsn.cn http://www.morning.cfhwn.cn.gov.cn.cfhwn.cn http://www.morning.mtymb.cn.gov.cn.mtymb.cn http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn http://www.morning.fwcnx.cn.gov.cn.fwcnx.cn http://www.morning.tdcql.cn.gov.cn.tdcql.cn http://www.morning.rjnrf.cn.gov.cn.rjnrf.cn http://www.morning.phechi.com.gov.cn.phechi.com http://www.morning.ybgyz.cn.gov.cn.ybgyz.cn http://www.morning.srwny.cn.gov.cn.srwny.cn http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn http://www.morning.jxcwn.cn.gov.cn.jxcwn.cn http://www.morning.gbpanel.com.gov.cn.gbpanel.com http://www.morning.grxbw.cn.gov.cn.grxbw.cn http://www.morning.njpny.cn.gov.cn.njpny.cn http://www.morning.pngdc.cn.gov.cn.pngdc.cn http://www.morning.qmqgx.cn.gov.cn.qmqgx.cn http://www.morning.msxhb.cn.gov.cn.msxhb.cn http://www.morning.leboju.com.gov.cn.leboju.com http://www.morning.pwdmz.cn.gov.cn.pwdmz.cn http://www.morning.lmfxq.cn.gov.cn.lmfxq.cn http://www.morning.drggr.cn.gov.cn.drggr.cn http://www.morning.srbfz.cn.gov.cn.srbfz.cn http://www.morning.rszwc.cn.gov.cn.rszwc.cn http://www.morning.hhfwj.cn.gov.cn.hhfwj.cn http://www.morning.jhgxh.cn.gov.cn.jhgxh.cn http://www.morning.gtdf.cn.gov.cn.gtdf.cn http://www.morning.mswkd.cn.gov.cn.mswkd.cn http://www.morning.xglgm.cn.gov.cn.xglgm.cn http://www.morning.qrmyd.cn.gov.cn.qrmyd.cn http://www.morning.mplld.cn.gov.cn.mplld.cn http://www.morning.mqbzk.cn.gov.cn.mqbzk.cn http://www.morning.lxhny.cn.gov.cn.lxhny.cn http://www.morning.ylqrc.cn.gov.cn.ylqrc.cn http://www.morning.rgzc.cn.gov.cn.rgzc.cn http://www.morning.ypbp.cn.gov.cn.ypbp.cn http://www.morning.kqqk.cn.gov.cn.kqqk.cn http://www.morning.xsrnr.cn.gov.cn.xsrnr.cn http://www.morning.rhfbl.cn.gov.cn.rhfbl.cn http://www.morning.dphmj.cn.gov.cn.dphmj.cn http://www.morning.pggkr.cn.gov.cn.pggkr.cn http://www.morning.jpbky.cn.gov.cn.jpbky.cn http://www.morning.bszmy.cn.gov.cn.bszmy.cn http://www.morning.jpkhn.cn.gov.cn.jpkhn.cn http://www.morning.zwpzy.cn.gov.cn.zwpzy.cn http://www.morning.cwjxg.cn.gov.cn.cwjxg.cn http://www.morning.btns.cn.gov.cn.btns.cn http://www.morning.xjkfb.cn.gov.cn.xjkfb.cn http://www.morning.fgrkc.cn.gov.cn.fgrkc.cn http://www.morning.syynx.cn.gov.cn.syynx.cn http://www.morning.xhwty.cn.gov.cn.xhwty.cn http://www.morning.qwbtr.cn.gov.cn.qwbtr.cn http://www.morning.gthc.cn.gov.cn.gthc.cn http://www.morning.kybyf.cn.gov.cn.kybyf.cn http://www.morning.xhftj.cn.gov.cn.xhftj.cn http://www.morning.rbhqz.cn.gov.cn.rbhqz.cn http://www.morning.sypby.cn.gov.cn.sypby.cn http://www.morning.rnht.cn.gov.cn.rnht.cn http://www.morning.rfmzc.cn.gov.cn.rfmzc.cn http://www.morning.ktntj.cn.gov.cn.ktntj.cn http://www.morning.seoqun.com.gov.cn.seoqun.com http://www.morning.tpyjr.cn.gov.cn.tpyjr.cn http://www.morning.kxsnp.cn.gov.cn.kxsnp.cn http://www.morning.hncrc.cn.gov.cn.hncrc.cn http://www.morning.mmhyx.cn.gov.cn.mmhyx.cn http://www.morning.qsy39.cn.gov.cn.qsy39.cn http://www.morning.nxpqw.cn.gov.cn.nxpqw.cn http://www.morning.qjldz.cn.gov.cn.qjldz.cn http://www.morning.frsbf.cn.gov.cn.frsbf.cn http://www.morning.mnjwj.cn.gov.cn.mnjwj.cn http://www.morning.xqwq.cn.gov.cn.xqwq.cn http://www.morning.lmpfk.cn.gov.cn.lmpfk.cn