一个字符串是否与某种模式匹配

是什么

英语:Regular Expression。在代码中常简写为regex、regexp或re。

正则两个字不好理解,其实换种翻译就理解了, 规则表达式

但是大部分都叫 正则表达式,很难改了。

正则表达式的用处

方便的检查一个字符串是否与某种模式匹配。

Python中的正则表达式

Python 有一个 re 模块,他提供了全部的正则表达式功能。

re.match 函数

re.match(pattern, string, flags=0)

其中,pattern 就是要匹配的正则表达式

string 就是要匹配的祝福词

flags 标志位,用于控制匹配方法,比如是否区分大小写,多行匹配等。

1
2
3
import re
print(re.match('peng', 'pengpeng'))
print(re.match('eng', 'pengpeng'))

re.search 函数

re.search(pattern, string, flags=0)

参数形式同 match函数,那有什么区别的

re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search 匹配整个字符串,直到找到一个匹配

1
2
3
import re
print(re.search('peng', 'pengpeng'))
print(re.search('eng', 'pengpeng'))

检索和替换

re.sub 函数

re.sub(pattern, repl, string, count=0, flags=0)

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
  • flags : 编译时用的匹配模式,数字形式。
1
2
3
4
5
import re
name = 'gao pengpeng'
new_name = re.sub('pengpeng', 'shuaipeng', name)
print(name)
print(new_name)

正则表达式对象

有些复杂的表达式,用 正则表达式对象更方便

如何生成一个正则表达式对象

re.compile(pattern[, flags])

1
2
import re
pattern1 = re.compile(r'\d+') # 用于匹配至少一个数字

匹配成功的结果怎么获取

  • group 获得整个匹配的子串
  • start 用于获取分组匹配的子串在整个字符串中的起始位置,即子串第一个字符的索引
  • end 用于获取分组匹配的子串在整个字符串中的结束位置,子串最后一个字符的索引+1
  • span 返回 (start(group), end(group))
1
2
3
4
5
6
7
import re
name = 'gao pengpeng'
result = re.search('peng', name)
print(result.group())
print(result.start())
print(result.end())
print(result.span())

找到正则表达式所匹配的所有子串

findall

1
re.findall(string[, pos[, endpos]])

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

1
2
3
4
import re
pattern = re.compile('eng')
result1 = pattern.findall('peng feng')
print(result1)

模式切分字符串

1
2
import re
re.split('\W+', 'gao peng 1')

正则表达式语法

更高级的匹配的写法。

比如

  1. ^ 匹配 字符串的开头
  2. $ 匹配 字符串的结尾
  3. . 匹配任意字符串,除了换行符
  4. […] 用来表示一组字符,[abc] 匹配 ‘a’, ‘b’ 或 ‘c’
  5. [^…] 用来表示除了之外的字符,[^abc] 匹配除了a,b,c之外的字符。
  6. x* 0个或过个
  7. x+ 1个或多个
  8. x? 0个或1个
  9. x{n} n个
  10. x{n,} 至少n个
  11. x{n,m} n到m个
  12. x|y x 或 b
  13. (x) 分组
  14. \w 数字、字母、下划线
  15. \W 非(数组、字母、下划线)
  16. \s 任意空白字符 \t \n \r \f
  17. \S 任意非空白字符
  18. \d 任意数字
  19. \D 任意非数字
  20. \n 换行符
  21. \t 制表符,即 tab

正则 案例分析

  1. peng 匹配peng

  2. [Pp]eng 匹配 peng 或者 Peng

  3. [abq] 匹配 a b 或者 q

  4. [0-9], 匹配任何数字

  5. [a-z] 小写字母

  6. [A-Z] 大写字母

  7. [a-zA-Z0-9] 大写,小写和数字

  8. [^aq] 除了 a 去以外的所有字符

  9. [^0-9] 除了数字以外的字符

视频课程

https://www.bilibili.com/video/BV1Ei4y1V7RT/