速通Python正则表达式

本文介绍了Python中的正则表达式基础,包括`[]`字符集、范围、转义字符,以及`re.match`、`re.search`、`re.findall`等函数的用法。重点讲解了如何使用Pattern对象和正则表达式标签.

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

几乎所有语言中的正则表达式都有相类似的语法,python亦莫能外。

快速入门

#后续代码均默认导入re,且使用test
import re
test = '''
`[]`表示一个字符集合,在匹配时可以匹配集合中的任意值。例如`[abc]`可以匹配`asdzxc`中的`a`和`c`。
通过`-`可以表示某个范围,例如`[a0-9]`表示匹配`a`和数字。
在`[]`中,特殊字符`+*()`将失去意义,会以普通的字符形式出现。而`^`将表示`非`,使用`^`之后将忽略对`[]`中的值的匹配。
'''

接下来直观地看一下最常用的的三大函数

>>> print(re.match(r'[0-9]',test))
None
>>> re.search(r'[0-9]',test)
<re.Match object; span=(81, 82), match='0'>
>>> test[81:82]
'0' #说明search匹配到了0
>>> re.findall(r'[0-9]',test)
['0', '9']

其中,re.match要求从头匹配;search可以从任意位置匹配,但只返回第一个匹配的值的位置;findall返回所有符合要求的值。

匹配格式

任意字符

  • . 匹配除了换行符之外的所有字符,在DOTALL模式下包括换行符

开头结尾符号

  • ^ 匹配字符串的开头,在MULTILIME模式下为行开头
  • $ 匹配字符串结尾,在MULTILIME模式下匹配行结尾

后置修饰符,针对修饰符前面的正则表达式进行匹配

  • * 匹配0到任意次重复,例如a*b可以匹配babaab等等
  • + 匹配1到任意次重复,例如a*b不可匹配b,但可匹配abaab等等
  • ? 匹配0或1次,例如a?b只能匹配aaaab中的ab
  • {m} 匹配m次,而且不可更改。例如a{2}只能匹配aa
  • {m,n} 匹配m到n次重复,且尽可能多,例如a{2,4}可以匹配aaaaaaaaa

此外,?可以修饰其他后置修饰符,表示非贪婪形式,例如a{2,4}将尽可能少地匹配出现的字符。

或运算符|可以连接两个正则表达式,例如A|B可以匹配A或者B

[]表达式

[]表示一个字符集合,在匹配时可以匹配集合中的任意值。例如[abc]可以匹配asdzxc中的ac

通过-可以表示某个范围,例如[a0-9]表示匹配a和数字。

[]中,特殊字符+*()将失去意义,会以普通的字符形式出现。而^将表示,使用^之后将忽略对[]中的值的匹配。

转义字符

除了Python中的标准转义字符之外,正则表达式还提供了一些其他含义的转义字符。

小写匹配内容大写匹配内容
\w数字字母下划线\W非数字字母下划线
\s空白字符\S非空白字符
\d数字\D非数字
\A字符开始
\z字符结束\Z只匹配到换行前的结束字符
\b单词便捷\B非单词便捷

正则表达式标签:

re.match等函数的输入参数为

re.match(pattern, string, flags=0)

其中,pattern即为将要匹配的模式;string为待匹配字符串,flag则是正则表达式的标签,起到一些其他的作用,可选参数如下

模式简写说明
re.ASCIIre.A只匹配ASCII
re.UNICODEre.U根据Unicode解析字符(默认)
re.IGNORECASEre.I对大小写不敏感
re.LOCALEre.L由当前语言决定\w, \W, \b, \B以及大小写匹配
re.MULTILINEre.M多行匹配
re.DOTALLre.S匹配包括换行在内的所有字符
re.VERBOSEre.X认为#后面的是注释
re.TEMPLATEre.T禁用回溯
re.DEBUG显示编译时的debug信息

Pattern

通过re.compile可以将待匹配字符串编译为正则对象Pattern,可更加方便地进行调用。例如

>>> p = re.compile(r'[0-9]')
>>> p.findall(test)
['0', '9']
>>> p.pattern       #pattern属性即编译前的字符串形式
'[0-9]'

Pattern对象中的成员方法可以和re模块下的函数实现相同的功能。记pat为正则字符串,pre.compile(pat)编译而成的正则对象,则就findall这个函数而言,re.findall(pat,test)就等价于p.findall(test)

除了findall之外,下表中的函数均支持这种转换

  • search:返回第一个匹配位置的对象;如无匹配返回None
  • match:要求从头匹配,其余和search相同
  • fullmatch:若整个test与正则表达式匹配则返回匹配对象,否则返回None
  • findall:返回所有匹配内容的列表
  • finditer:返回所有匹配位置的列表
  • spilt:通过正则表达式对字符串进行分割
  • sub:用于字符串的替代
  • subn:与sub()相同,但是返回一个元组
  • escape:对正则表达式中的特殊字符进行转义
Python爬虫可以细分为多个方面,其中包括但不限于以下几个方面: 1. 网络请求库:Python爬虫的第一步是发送网络请求获取网页内容,常用的网络请求库包括urllib、requests等。\[1\] 2. 解析库:获取到网页内容后,需要使用解析库来提取所需的数据。常用的解析库有BeautifulSoup、lxml等。 3. 数据存储:爬取到的数据需要进行存储,可以选择将数据保存到本地文件、数据库或者其他存储介质中。 4. 动态网页爬取:对于使用JavaScript动态生成内容的网页,需要使用Selenium等工具来模拟浏览器行为进行爬取。 5. 反爬虫策略:为了防止被网站屏蔽或限制访问,爬虫需要应对反爬虫策略,例如设置请求头、使用代理IP等。 6. 数据清洗与分析:爬取到的数据可能存在噪音或者需要进行进一步的处理和分析,可以使用正则表达式、pandas等工具进行数据清洗和分析。 以上是Python爬虫的一些细分方面,根据具体需求和项目要求,可以选择相应的技术和工具进行开发。 #### 引用[.reference_title] - *1* *3* [六万字带你一次性python爬虫基础](https://blog.csdn.net/qq_52736131/article/details/123251138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python爬虫入门2:HTML知识简介](https://blog.csdn.net/LaoYuanPython/article/details/113031157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

微小冷

请我喝杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值