(十四)Python:正则表达式

13 篇文章 0 订阅
3 篇文章 0 订阅

      正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
      Python提供了re模块,它支持Perl风格的正则表达式模式。

re.match

语法:re.match(pattern, string, flags=0)
作用:从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
参数;

  • patten:正则表达式。
  • string:待匹配字符串。
  • flags:标志位,用于控制匹配方式,比如是否区分大小写等。

标志位详情:

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

      多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:
      我们使用group函数来获取匹配的结果。
示例

import re

pattern = "www"
string = "www.baidu.com"
ret = re.match(pattern,string)
print(ret.group())

pattern2 = "WWW"
ret2 = re.match(pattern2,string)#区分大小写
if ret2!=None:
    print(ret2.group())
else:
    print("没有匹配到")

ret3 = re.match(pattern2,string,re.I)#不区分大小写
print(ret3.group())

pattern3 = "com"
ret4 = re.match(pattern3,string)
if ret4!=None:
    print(ret4.group())
else:
    print("没有匹配到")

这里写图片描述


re.search

语法:re.search(pattern, string, flags=0)
作用:匹配整个字符串并返回第一个成功的匹配。
参数;

  • patten:正则表达式。
  • string:待匹配字符串。
  • flags:标志位,用于控制匹配方式,比如是否区分大小写等。

示例:

import re

pattern = "com"
string = "www.baidu.com www.baidu.com"
ret = re.search(pattern,string)
print(ret)
print(ret.group())

这里写图片描述


re.compile

语法:re.compile(pattern[,flags])
作用:编译正则表达式,用于生成一个正则表达式对象。
参数;

  • patten:正则表达式。
  • flags:标志位,用于控制匹配方式,比如是否区分大小写等。

示例:

pattern = "com"
pat = re.compile(pattern)#生成一个正则表达式对象
string = "www.baidu.com www.baidu.com"
ret = pat.search(string)
print(ret)
print(ret.group())

findall

语法:findall(string[,pos[,endpos]])
作用:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
           注意: match 和 search 是匹配一次 findall 匹配所有。
参数;

  • patten:正则表达式。
  • pos:可选参数,指定字符串的起始位置,默认为 0。
  • endpos:可选参数,指定字符串的结束位置,默认为字符串的长度。

示例:

import re

pattern = r"\d+"#查找数字
pat = re.compile(pattern)
string = "https://hao.360.cn https://hao.360.cn https://hao.360.cn https://hao.360.cn"
list = pat.findall(string)
print(list)
list2 = pat.findall(string,10,20)
print(list2)

re.split

语法:re.split(pattern, string[, maxsplit=0, flags=0])
作用:按照能够匹配的子串将字符串分割后返回列表。
参数;

  • patten:正则表达式。
  • string:待匹配字符串。
  • maxsplit:分隔次数,默认为0,不限制分隔次数。
  • flags:标志位。

示例:

import re

pattern = "\."#根据.进行分隔。因为.有特殊的含义所以需要转义
string = "www.baidu.com www.baidu.com www.baidu.com"
list = re.split(pattern,string)
print(list)

list2 = re.split(pattern,string,3)
print(list2)

这里写图片描述


特殊字符

字符描述
.匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用 ‘[.\n]’ 。
\d匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\w匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。
\W匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。

量词

字符描述
*匹配字符出现0次或者无限次,即可有可无。
+匹配字符出现1次或者无限次,即至少出现1次。
?匹配字符出现1次或者0次,即要么有1次,要么没有。
{m}匹配字符出现m次。
{m,}匹配字符至少出现m次
{m,n}匹配字符出现m次到n次。

边界

字符描述
^匹配字符串开头。
$匹配字符串结尾。
\b匹配一个单词边界。
\B匹配一个非单词边界。

贪婪和懒惰

           Python里正则表达式数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符。
示例:

import re

pattern = "www.*\.com"#贪婪模式
string ="www.baidu.com www.baidu.com www.baidu.com www.baidu.com"
list = re.compile(pattern).findall(string)
print("贪婪模式:",list)
pattern2 = "www.*?\.com"#懒惰模式
list2 = re.compile(pattern2).findall(string)
print("懒惰模式:",list2)

这里写图片描述
贪婪模式总是尝试匹配更多的字符,所以将整个string都匹配了。懒惰模式则是见好就收。这就是一个?号的区别。


其他常用匹配规则

模式描述
\A匹配字符串开头。
\Z匹配字符串结尾,如果存在换行,只匹配换行前的结束字符串。
\z匹配字符串结尾,如果存在换行,同时会匹配换行符。
\G匹配最后匹配完成的位置。
\n匹配一个换行符
\t匹配一个制表符。
[…]用来表示一组字符,单独列出,比如[amk]匹配a,m和k。
[^…]不在[]中的字符,比如[^amk]匹配除了a,m和k之外的字符。
a|b匹配a或b。
()匹配()内的表达式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值