【python正则表达式】

1、什么是python正则表达式

正则表达式是进行文本匹配的一种方式,通过正则来匹配到自己需要的内容。和我们用搜索浏览器一样,搜索abc,搜索出来的内容就是包括abc相关的。
正则是在一个目标字符串中,搜索到你需要的关键字

  • 目标字符串: Youth is not a time of life; it is a state of mind
  • 正则表达式: mind

下面这个网站就是可以使用正则来匹配搜索。
https://tool.oschina.net/regex/
在这里插入图片描述

2、常用的python正则表达式

.	匹配除换行符以外的任意字符                                   
\b	匹配字符串中的单词的开始或结束                                   
^	匹配字符串的开始                                   
$	匹配字符串的结束                                   
\w	匹配字母或数字                                   
\s	匹配任意的空白符                                   
\d	匹配数字                                   


2.1详细介绍如下

  • 1、 比如 \bm…e\b
    在这里插入图片描述

  • 2、 \w 匹配字母或数字
    \b\w\w\w\w\b 代表什么 ?

    \w 匹配字母或数字 ,所以上面的是开头到结尾,一共4个。都是数字和字母。

  • 3、 \s 匹配任意的空白符
    空白符包括空格,制表符(tab),换行符这三个很特殊的字符 , 通过and\smade 可以匹配到and made

在这里插入图片描述

  • 4、 ^ 和 $ 匹配字符串开始和结束
    在这里插入图片描述

只想验证字符串是不是以ma开头,那么可以通过^ma 来验证

值得注意的是,如果是[^a] 这种形式, ^表示否,[^a] 表示匹配不是a的任意一个字符

3、常用的python正则表达式 ----数量相关

3.1 \b\w*a\w*\b 的匹配

*	重复0次或更多次 
+	重复1次或更多次 
?	重复0次或1次 
{n}	重复n次 
{n,}	重复n次或更多次 
{n,m}	重复n到m次 

\b\wa\w\b w*表示 0个或多个字母或数字。 所以整个的意思就是, 找个单词,中间是a就行了。

3.2 \d+ 的匹配

+ 表示重复1次或更多次

\d+ \d 表示数字,+ 表示重复1次或多次
在这里插入图片描述

3.3 (\+86)?\d{11} 的匹配

(\+86)?\d{11}  是匹配我们的手机号码的 
  • 理解这个需要知道下面三个点
    • 1、转义字符

      • 比如 + 表示重复1次或更多次,如果想要匹配的字符里本身就有+ 该怎么办呢?
      • 使用 \ 转义 + , 这个时候+ 就是+,没有别的意思。
    • 2、分组

      • 前面说重复,都是重复某一个字符,但是如果想要让一个字符串重复呢,就如本题中的+86,它作为一个整体重复0次或1次,就需要用小括号把+86括起来,(+86) 就变成了一个分组,也叫子表达式,在使用正则表达式匹配时,这些分组的部分如果被匹配上,可以获得字符串中匹配的字符串。
    • 3、重复指定次数

      • *重复0次或更多次
      • +重复1次或更多次
      • ?重复0次或1次

即这个正则表达式 (\+86)?\d{11} 可以被拆分为几个部分来解析其意义:

  • 1、 (\+86)?
    +:匹配一个加号字符(在正则表达式中,+ 是一个特殊字符,表示前面的字符或组的一个或多个重复,所以要在前面加上 \ 进行转义以匹配实际的加号字符)。

    86:匹配数字“86”。
    ?:表示前面的部分(即 +86)是可选的,可以出现一次或不出现。

  • 2、 \d{11}
    \d:匹配任何数字字符,相当于 [0-9]。
    {11}:表示前面的 \d 必须恰好重复11次。

所以,整个正则表达式 (+86)?\d{11} 的意义是:
匹配一个由11位数字组成的字符串,该字符串前面可能(也可能不)有一个加号和一个“86”。

4. 重复指定次数

  • {n} 表示重复n次
  • {n,} 表示n次或更多次,换一个说法就是至少重复n次
  • {n, m} 表示重复n到m次,换一个说法就是至少重复n次,最多重复m次

5.重复的量词的含义

将这些量词分为两部分,一部分是有{}的,一部分是没有{},先说有{}符号的

  • 规定重复次数的 {n}
  • 规定重复次数下限的 {n, }
  • 规定重复次数下限和上限的 {n, m}

再来看 * + ?

* 表示0次或多次,和Linux中类似。        
+ 是在* 的基础上加1,就变成了1次或多次
? 表示不清楚,所以是0次或者1次。

6. 正则表达式转义,替换

1. 字符转义

  • 如果正则表达式想要匹配的字符恰好是特殊代码,或者重复量词等其他正则表达式里用于描述规则的字符,那么就需要使用字符转义。

  • 比如你想匹配+ 或者 ?,那么你要在正则表达式里写成 \+\? 这样,他们就代表字符加号和问号,而不是重复几次,如果想匹配\, 则写成\\

2. 替换

  • | 匹配左右任意一个表达式,可以表示或的意思。

\bthis\b|\bbook\b 表示 匹配得上this,或者匹配得上book

3. 使用[] 指定一个字符范围

  • 特殊代码. \w \s \d 所指定的字符,范围太大了,不够灵活,比如我只想匹配0到5 这个范围内的数字,使用\d就不行了,虽然可以写成 0|1|2|3|4|5 ,但使用起来不够方便,对于这种情况,就可以使用中括号
  • [0-5] 表示从0到5的字符
  • [a-z] 表示从a到z的字符
  • [a-zA-Z0-5] 多个范围
  • [+?] 表示+ 或者 ? 在中括号里,特殊字符可以不使用字符转义

7. python中怎么使用正则

  • 1、re模块的使用------match
    功能: match方法的作用是从字符串起始位置开始匹配一个模式,如果模式不匹配,则返回None
import re

res = re.match('www', 'www.coolpython.net')
if not res is None:
    print(res.span())  # 输出匹配的起始位置和结束位置
    print(res)

在这里插入图片描述

  • 2、re模块的使用------search

search
功能:按照需求,在整个字符串中查找,而不一定是从开头

需求:匹配出文章阅读的次数

import re

ret = re.search("\d+", "阅读次数为 9999")
if ret:
    print(ret.group())  # 如果找到了匹配项,则打印它  
else:
    print("没有找到数字序列")   

 #运行结果: 9999  

7. 正则表达式实践

7.1匹配URL [a-zA-z]+://[^\s]*
  • 1、[a-zA-z]+

    • [a-zA-z]+ 这部分匹配一个或多个(由于 +)小写或大写英文字母。这通常用于匹配URL的协议部分,如 http, https, ftp 等。
  • 2、 :// 这部分直接匹配URL中的 :// 字符串

  • 3、 [^\s]

    • [^\s] 这个字符类匹配任何不是空白字符(\s 代表空白字符,如空格、制表符、换行符等)的字符。^ 在这里是一个否定符号。

    • * 这个量词表示前面的字符类([^\s])可以出现零次或多次。

7.2 匹配.com的邮箱
  • ^[a-zA-Z0-9_-]+@[a-z0-9]+.com$

  • 先考虑规则,邮箱分为两部分,A@B,A部分是邮箱用户名部分,可以由大小写字母,数字,下划线,中划线构成。

  • B是域名部分,域名通常都是xxx.xxx的形式,那么根据实际工作中的需要,可以继续细化,域名的前半部分只能由小写字母和数字构成,后半部分只能是com,根据这些规则写出正则表达式

解释如下:

  • 1、 ^: 这是正则表达式的开始锚点,它确保整个字符串的开始与接下来的模式匹配。

  • 2、[a-zA-Z0-9_-]+:

    • [a-zA-Z0-9_-]: 这是一个字符集,它匹配任何小写字母、大写字母、数字、下划线(_)或连字符(-)。

    • +: 表示前面的字符集(即 [a-zA-Z0-9_-])必须出现一次或多次。因此,这部分匹配电子邮件地址的用户名- 部分(在 @ 之前的部分)。

  • 3、@: 匹配文字字符 @。

  • 4、[a-z0-9]+:

    • [a-z0-9]: 这是一个字符集,它匹配任何小写字母或数字。
    • +: 表示前面的字符集(即 [a-z0-9])必须出现一次或多次。这部分匹配电子邮件地址的域名部分(在 @ 之后的部分),但请注意,它只接受小写字母和数字,并且没有点(.)来分隔子域名。
  • 5、 .com: 匹配文字字符 .com。这部分是电子邮件地址的顶级域名(TLD),如果是别的,就可以换成别的

  • 6、$: 这是正则表达式的结束锚点,它确保整个字符串的结束与前面的模式匹配。

8. python 正则中r的作用

  • 在Python中,字符串中的反斜杠(\)是一个特殊字符,它用于表示转义序列,如\n(换行)、\t(制表符)等。但是,在正则表达式中,我们经常需要使用到反斜杠,比如\d(匹配任何数字)、\s(匹配任何空白字符)等 ,如果没有r前缀,我们需要为每个反斜杠写两个反斜杠(\)来避免Python解释器将其视为转义字符。但这样做会使正则表达式变得难以阅读和编写。

  • 使用r前缀,就可以直接写出你想要的正则表达式,而无需担心Python解释器会将其中的反斜杠视为转义字符。

  • 8.1 不使用 r 前缀

import re  
pattern = '\\d+'  # 匹配一个或多个数字  
match = re.search(pattern, 'abc123def')  
if match:  
    print(match.group())  # 输出: 123
  • 8.2 如果使用r前缀的话
import re  
pattern = r'\d+'  # 匹配一个或多个数字  
match = re.search(pattern, 'abc123def')  
if match:  
    print(match.group())  # 输出: 123

由于使用了r前缀,我们可以直接写出\d+而无需担心Python解释器会误解它。这使得正则表达式更加清晰和易于编写。

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值