正则表达式+示例(以示例为主)新手小白都能学会的超详细简单教程讲解

一:含义

首先我们来了解一下正则表达式是什么

正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。它可以在文本中查找、替换、提取和验证特定的模式。

二:元字符

有特定含义的字符,常见的有:

这里推荐菜鸟教程,里面有很完整的内容。正则表达式 – 教程 | 菜鸟教程

三:如何使用

  我们先以一段代码为例

(一)如何表示空格与数字为例:

        1.   导包

注意开头必须要是 ^字符串开头 比如这里是^Hello     结尾是 字符串结尾$ 比如这里是Demo$.        记得先导包,import  re.

        2.运行代码

当我们只要运行结果 123 4567 的时候(注意有空格),我们去元字符中寻找可以表示空格和数字的字符,我们可以知道是 \s 和 \d  。那我们按照顺序一个一个对应输上去就是\s\d\d\d\s\d\d\d\d。这里要注意你要得到哪个结果就要框哪个表达,具体看图:

       3.运行结果

这里我将我想要运行的语句用括号括起来了,这里只有一句所以只有一句运行语句

        print(result.group(1))

        运行结果如下:

        4.简便书写

当然如果我们要运行获取的结果字符串很多,比如这种情况,当有10位甚至100位呢,我们要输入那么多的字符吗,当然这不现实。所以我们可以在后面直接用 {字符串个数} 来表示。就像这样\d{100} ,这就是有100位数字。话不多说,看图:

最后运行结果是一样的

     (二)如何表示字母与数字

同样以第一张图为例:

        1.运行代码

当我们需要得到 I123 Love456YOU 时,就需要输入表示字母与数字的对应字符,我们可以从元字符中找到 \w可以表示字母,从而得到表示我们要得到的运行结果代表队字符。                        \s\w\d\d\d\w\w\w\w\d\d\d\w\w\w\s(这里注意字符前后都是有空格的,一定加上,不然会报错。空格不用括)同样括号括起来。如图:

       2.运行结果:

(三)如何表示中文与数字

        1.运行代码

当中文字符与数字相结合,用什么来表示文字呢?查找元字符我们可以知道 \D可以表示中文字符

具体看图:

这里我们用刚才上面说的只读数字,可以看到中文字符有8位,所以写下来就是上述情况\s\D\D\D\D\D\D\D\D\D\d\d\d\d\D\s

        2.运行结果 

(四)如何表示多个字符叠加情况

        1.运行代码

当我们要读取的字符中字符数含量过大且复杂,这时候我们全部打出来,当然,这不可能。(也是可以的,只是时间花费很大)这时候我们可以从元字符中找到一个简便方法  \d+ , \D+.看图:

        2.运行结果。

        那么多可莉和数字我不可能全打出来,所以用\D+来表示中文字符,\d+来表示数字字符。这样就可以得到我们想要的结果了。

        3.结合错乱的字符:

        接下来我们看一个结合不规则的情况,前面是中文字符与数字的结合并且文字量很大,这时候我们就可以用刚才讲的\D+  \d+,不过要记得加上开头与结尾。  比如下方的^西    与   好了。$。记得要把输出结果写4遍,因为我们要读4个数字。

        4.运行结果

这样我们就得到了我们要的数字了。

(五)贪婪匹配与非贪婪匹配

1.什么是贪婪匹配

         简单介绍一下贪婪匹配:

        (1)介绍

在贪婪模式下,匹配器尽可能多地匹配符合要求的字符,直到不能再匹配为止。例如,正则表达式 a.*b 在匹配字符串 "abbcab" 时,会匹配整个字符串 "abbcab",而不是期望的 "ab"

        (2)用例

我们看个例子。我们想要读取数字200,而我们用贪婪匹配就是用  .* 来表达我们所有的字符中间的数字字符用\d+表示。

前面说了那么多的元字符,归根结底就是三个字符 .*?它可以代表所有的字符

        让我们看看运行结果吧,只有一个0.这就是贪婪匹配,只有

   2.什么是非贪婪匹配

     (1)介绍

在非贪婪模式下,匹配器尽可能少地匹配符合要求的字符,直到满足要求为止。例如,正则表达式 a.*?b 在匹配字符串 "abbcab" 时,只会匹配到第一个 "ab",而不是整个字符串。

        看个例子:用.*?表示字符,主要结尾加上re.S

        运行结果:

(2)

看下面这张图有什么不同吗,我将re.match换成了re.search这样就可以不从第一个字母开始匹配了,得到的结果是一样的。

(六)如何读html中的内容

看图:

1.用例

从前面的学习中我们可以知道所有的内容都可以用.*?来表示。我们读取href中的内容就简单,记得加上单引号。我们看一句是怎么写的:href="(.*?)"

# 提取html中的
import re

content = """
<dd><span class="number">1</span><a href="/play/49891/454929.shtml" target="m" title="亲爱的小课桌">亲爱的小课桌</a></dd>
<dd><span class="number">2</span><a href="/play/795/454553.shtml" target="m" title="悟空">悟空</a></dd>
<dd><span class="number">3</span><a href="/play/20222/453529.shtml" target="m" title="粉雾海">粉雾海</a></dd>
<dd><span>4</span><a href="/play/46594/453598.shtml" target="m" title="姐姐真漂亮">姐真漂亮</a></dd>
<dd><span>5</span><a href="/play/49518/453225.shtml" target="m" title="斯芬克斯">斯芬克斯</a></dd>
"""

# re.match只能从字符串开头开始匹配 要读哪个扩哪个
# \w匹配大小写字母  \D匹配任意非数字(中文) 如果数字过多直接用\d+
# 字符串开头要写(^西)  结尾也要写,符号也要写  (好了。$)
# 加上re.S 就是通用了  re.search 可以不用从第一个字母开始匹配
result = re.search('href="(.*?)".*?href="(.*?)".*?href="(.*?)".*?href="(.*?)"',content,re.S)
print(result.group(1))
print(result.group(2))
print(result.group(3))
print(result.group(4))
结果:

2.findall

让我们来看另一种写法,用findall,直接输出结果

#findall 可以获取所有的数据
import re

content = """
<dd><span class="number">1</span><a href="/play/49891/454929.shtml" target="m" title="亲爱的小课桌">亲爱的小课桌</a></dd>
<dd><span class="number">2</span><a href="/play/795/454553.shtml" target="m" title="悟空">悟空</a></dd>
<dd><span class="number">3</span><a href="/play/20222/453529.shtml" target="m" title="粉雾海">粉雾海</a></dd>
<dd><span>4</span><a href="/play/46594/453598.shtml" target="m" title="姐姐真漂亮">姐真漂亮</a></dd>
<dd><span>5</span><a href="/play/49518/453225.shtml" target="m" title="斯芬克斯">斯芬克斯</a></dd>
"""

# re.match只能从字符串开头开始匹配 要读哪个扩哪个
# \w匹配大小写字母  \D匹配任意非数字(中文) 如果数字过多直接用\d+
# 字符串开头要写(^西)  结尾也要写,符号也要写  (好了。$)
# 加上re.S 就是通用了  re.search 可以不用从第一个字母开始匹配
result = re.findall('href="(.*?)"', content, re.S)
print(result)
结果:

好了这次的正则表达式示例详解就说完啦,感谢观看。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值