学好正则表达式,啥难匹配的内容都给我匹配上【python爬虫入门进阶】(07)

举报
码农飞哥 发表于 2021/12/06 10:43:38 2021/12/06
【摘要】 正则表达式还挺有用的

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
😁 1. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
💪🏻 2. Python基础专栏,基础知识一网打尽。 Python从入门到精通
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
本文重点:这篇文章主要学习正则表达式以及re模块的使用。
关注下方公众号,众多福利免费嫖;加我VX进群学习,学习的路上不孤单
在这里插入图片描述

正则表达式是什么?

按照一定的规则,从某个字符串中匹配出想要的数据,这个规则就是正则表达式。

正则表达式的使用

正则表达式的使用也很简单,标准的使用方式是:

  1. 使用match方法进行匹配,match方法只能从字符串开始的地方匹配。
    语法结构:match(pattern, string, flags=0) 其中参数pattern传入的是正则表达式,string传入的是待匹配的字符串,表示从字符串的开始位置查找满足正则表达式pattern的字符。如果能匹配到则返回一个Match对象,匹配不到的话则返回None对象。
    比如下面代码ret = re.match('he', text)表示匹配出以he开头的字符。
import re
text = "hello"
# match只能从开始的地方匹配
ret = re.match('he', text)
# group方法可以返回匹配结果
print(ret.group())

group方法可以返回到的字符结果。
2. 使用search 方法进行查找,search方法表示找出整个字符串中
语法结构:search(pattern, string, flags=0) 其中参数pattern传入的是正则表达式,string传入的是待匹配的字符串,表示从整个字符串中查找满足正则表达式pattern的字符。如果能匹配到则返回一个Match对象,匹配不到的话则返回None对象。

text = "hello"
# match只能从开始的地方匹配
ret = re.search('el', text)
# group方法可以返回匹配结果
print(ret.group())

在这里插入图片描述

1. 点 . 符号可以匹配任意的字符,只能匹配一个字符,不能匹配换行符

text = "1hello"
# match只能从开始的地方匹配
ret = re.match('.', text)
# group方法可以返回匹配结果
print(ret.group())

在这里插入图片描述

2. \d:匹配任意的数字(0-9 范围内)

\d:用于匹配任意的数字(0-9 范围内)

text = "712"
ret = re.match('\d', text)
print(ret.group())

在这里插入图片描述

4. \D: 匹配任意的非数字

\D 与**\d** 恰恰相反,\D 表示匹配任意的非数字

text = "dbc"
ret = re.match('\D', text)
print(ret.group())

在这里插入图片描述

5. \s : 匹配空白字符(\n,\t,\r以及空格)

\s 用于匹配空白字符,包括:\n,\t,\r以及空格 等。

text = "\n"
ret = re.match('\s', text)
print(ret.group())

运行结果虽然打印的结果虽然看不到字符,但是确实是匹配到了,因为\n是一个换行符。
在这里插入图片描述

6. \w:匹配的是 a-z,A-Z,数字和下划线

\w 匹配的是a到z之间的所有字符,A到Z之间的所有字符,数字以及下划线

text = "_"
ret = re.match('\w', text)
print(ret.group())

在这里插入图片描述

7. \W: 与\w 刚好相反

\W: 匹配的数据与**\w**匹配的刚刚相反,\W 匹配的就是非字符,非数字以及非下划线

text = "+"
ret = re.match('\W', text)
print(ret.group())

在这里插入图片描述

8. []组合的方式,只要满足中括号中的字符,就可以被匹配

[] 中括号组合的方式,只要满足中括号中的字符,就可以被匹配到。

text = "a1"
ret = re.match('[an1]', text)
print(ret.group())

在这里插入图片描述

9. ^(脱字号): 表示以非xxx开始

^(脱字号): 表示以非xxx开始

text = "非数字"
ret = re.match('[^0-9]', text)
print(ret.group())

在这里插入图片描述

10. + 匹配多个字符

前面介绍的都是单个字符的匹配,如果有多个字符满足匹配要求也是不能匹配输出的。+ 就是将满足条件的字符串都匹配输出。

text = "-0731-88881312"
ret = re.match('[\d\-]+', text)
print(ret.group())

在这里插入图片描述

11. 中括号的形式代替\d

text = "非数字"
ret = re.match('[^0-9]', text)
print(ret.group())

其中表达式 [^0-9] 等价于[^\d] 表示匹配出非数字

在这里插入图片描述

12. 中括号匹配a-z,A-Z以及0-9

表达式[a-zA-Z0-9]+ 表示匹配所有a-z,A-Z以及0-9的字符。

text = "aABCEw091456"
ret = re.match('[a-zA-Z0-9]+', text)
print(ret.group())

在这里插入图片描述

13. * 匹配0或者任意多个字符

** * ** 用于匹配0个或者任意多个字符。下面代码中[a-z]*表示匹配出所有以a-z开头的字符串中的字符。\d* 表示匹配出所有以数字开头的字符串中的字符。

text = "abcd212731"
ret = re.match("[a-z]*", text)
print(ret.group())

text = "0731abcd"
ret = re.match("\d*", text)
print(ret.group())

在这里插入图片描述

14. +,匹配1个或者多个字符

+ 号用于匹配1个或这个多个字符。\w 表示匹配所有 a-z,A-Z,数字和下划线的字符,但是不包括+。所以 ,\w+ 表达式在字符串ab+cd中匹配出的结果是ab。

text = "ab+cd"
ret = re.match('\w+', text)
print(ret.group())

在这里插入图片描述

14. ?匹配一个或者0个(要么没有,要么就只有一个)

? 用于匹配一个或者0个 (要么没有,要么就只有一个)字符

text = "abcd"
ret = re.match('\w?', text)
print(ret.group())

在这里插入图片描述

15. {m} 表示匹配m个字符

{m} 表示匹配m个字符。

text = "abcefd"
ret = re.match('\w{4}', text)
print(ret.group())

在这里插入图片描述

16. {m,n},匹配m-n个字符

**{m,n}**用于匹配第m到第n之间的字符

text = "hbcefd"
ret = re.match('\w{1,5}', text)
print(ret.group())

在这里插入图片描述

总结

本文详细罗列了正则表达式的各种语法,简单移动,读者朋友们如有问题欢迎扫描下方二维码联系我。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。