Python——正则表达式

什么是正则表达式?

字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。


元字符

.
匹配除换行符外任意一个字符

[abc]
字符集合,只能表示一个字符位置。匹配所包含的任意一个字符

[^abc]
字符集合,只能表示一个字符位置。匹配除去集合内字符的任意一个字符

[a-z]
字符范围,一个集合,表示一个字符位置匹配所包含的任意一个字符

[^a-z]
字符范围,一个集合,表示一个字符位置匹配除去集合内字符的任意一个字符

\b
匹配单词的边界

\B
不匹配单词的边界

\d
等同[0-9] 匹配一位数字

\D
等同[^0-9] 匹配一位非数字

\s
匹配1位空白字符,包括换行符、制表符、空格等同[\f\r\n\t\v]

\S
匹配1位非空白字符

\w
等同[a-zA-Z0-9_] 包含中文

\W
匹配\w之外的字符


转义

凡是在正则表达式中有特殊意义的符号,转义时使用\


重复

*
前面的正则表达式重复0次或多次

+
前面的正则表达式重复至少一次


前面的正则表达式重复0次或1次

{n}
重复n次

{n,}
重复n次以上

{n,m}
重复n到m次


分组(捕获)断言

(pattern)
分组(捕获)后会自动分配组号从1开始可以改变优先级 \数字 匹配对应的分组(指的是前一个匹配上的分组的内容)

(?:pattern)
只改变优先级不分组

(?exp)(?nameexp)
分组捕获 给组命名Python句法为(?Pexp)

(?=exp)
零宽度正预测先行断言断言exp一定在匹配的右边出现

(?<=exp)
零宽度正回顾后发断言断言exp一定出现在匹配的左边出现

(?!exp)
零宽度负预测先行断言断言exp一定不会出现在右侧

(?<!exp)
零宽度负回顾后发断言断言exp一定不会出现在左侧


贪婪与非贪婪

默认贪婪模式,尽可能多的匹配字符串

*?
匹配任意次,尽可能少重复

+?
匹配至少一次,尽可能少重复

??
匹配0或1次,尽可能少重复

{n}?
匹配至少n次,尽可能少重复

{n,m}?
匹配至少n次,至多m次,尽可能少重复


引擎选项

IgnoreCase
匹配时忽略大小写
比如:re.Ire.IGNORECASE

Singleline
单行模式,可穿透/n
比如:re.Sre.DOTALL

Multiline
多行模式
比如:re.Mre.MULTILINE

IgnorePatternWhitespace
忽略表达式中空白字符,若要使用空白字符
比如:re.Xre.VERBOSE


re模块

编译

  • re.compile(pattern, flags=0)
    • 返回正则表达式对象regex
    • 正则表达式编译的结果保存,下次使用同样的pattern时不需要重新编译

单次匹配

  • regex.match(string[, pos[, endpos]])
    • 从字符串开头匹配,可指定开始与结束位置 返回match对象
  • regex.search(string[, pos[, endpos]])
    • 从头搜索直到第一个匹配,可指定开始与结束位置 返回match对象
  • regex.fullmatch(string[, pos[, endpos]])
    • 整个字符串与正则表达式匹配

全文搜索

  • regex.findall(string[, pos[, endpos]])
    • 对整个字符串从左至右匹配,返回所有匹配项的列表
  • regex.finditer(string[, pos[, endpos]])
    • 对整个字符串,从左至右匹配,返回所有匹配项的迭代器,每项都是match对象

匹配替换

  • regex.sub(replacement, string, count=0)
    • 使用pattern对字符串string进行匹配,对匹配项用replacement替换
    • replacement可以是string、bytes、function
  • regex.subn(replacement, string, count=0)
    • 功能类似sub 返回一个元组 (new_string, number_of_subs_made)

分割字符串

  • regex.split(string, maxsplit=0)
    • 返回列表

分组

  • 使用(pattern)捕获的数据放到组中
  • match类方法
  • group(N)
    • 1-N时对应的分组 0但会整个匹配的字符串
    • 如果使用了命名分组,可用group(name)方式取出
  • groups()
    • 返回所有组的一个元组
  • groupdict()
    • 返回所有命名分组的字典
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值