re

re模块三种主要的正则表达式匹配方法

match()

match(pattern, string) 会在 string 中匹配正则表达式 pattern ,这个方法从头开始匹配,且只匹配第一个命中项。没有匹配到时返回 None

1
2
3
4
5
6
7
import re
s1="000python111pythonpython222"
s2="python111pythonpython222"
result1=re.match('python',s1)
result2=re.match('python',s2)
print(result1)
print(result2)

输出:

1
2
None
<re.Match object; span=(0, 6), match='python'>

通过 result.group()result.span() 可以分别查看匹配到的字符串内容及其起止位置(这个起止位置是左闭右开的)

group 方法的使用

  • match_object.group(n):这里,n 是一个整数,代表正则表达式中第 n 个括号(括号用于在正则表达式中创建分组)的匹配结果。
  • 如果正则表达式中有多个括号(分组),它们将按照在表达式中出现的顺序从左到右编号,从 1 开始。
  • group(0)group() 返回整个匹配的字符串。

search(pattern, string)match(pattern, string) 类似,但是是全局匹配而非从头匹配。它也只匹配第一个命中项。

findall

findall(pattern,string) 会进行全局匹配且匹配所有命中项,返回的是一个匹配到的字符串的列表,没有匹配到内容的时候返回空列表。

替换匹配的文本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import re

def square(match):
num = int(match.group())
return str(num * num)

text = "这是一个示例文本,其中包含1234一些数字5678。"

# 使用正则表达式匹配文本中的所有数字
pattern = r'\d+'
result = re.sub(pattern, square, text)

print(result)

字符串匹配规则

字符 功能
. 匹配任意一个字符(除了\n)
[] 匹配[ ]中列举的字符
\. 匹配 .
\d 匹配数字
\D 匹配非数字
\s 匹配空白,即空格或Tab
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
  • 字符串前面加 r 标记,表示其转义字符无效。正则表达式也是一个字符串,其中的 \ 应该被按照正则表达式的规则解析,而非转义字符。所以正则表达式前一般有 r 标记。
  • [] 使用例子:匹配所有英文字符:[A-Za-z] 。匹配2或4或6: [246]
  • 正则表达式不要写额外的空格

数量匹配

字符 功能
* 匹配前一个规则的字符出现0至无数次
+ 匹配前一个规则的字符出现1至无数次
匹配前一个规则的字符出现0或1次
{m} 匹配前一个规则的字符出现m次
{m,} 匹配前一个规则的字符出现m至无数次
{m,n} 匹配前一个规则的字符出现m至n次(左闭右闭)

边界匹配

字符 功能
^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配一个单词的边界
\B 匹配一个非单词的边界

其他运算符

字符 功能
|
() 确定优先级
  • 如果有 () 进行分组, findall() 会将每个括号内的表达式匹配到的内容都找到并包装成元组。