编辑
2026-04-01
undefined
00

目录

元字符匹配
findall()
finditer()
search()
match()
sub()
预加载正则表达式

元字符匹配

单字符匹配: 字符功能.匹配任意字符,除了\n[]匹配[]中列举的字符\d匹配数字,相当于[0-9]\D匹配非数字\s匹配空白,即空格、tab键\S匹配非空白\w匹配单词字符,即任意字母数字下划线\W匹配非单词字符 数量匹配: 字符功能*0或多个,相当于{0,}+至少一个,相当于{1,}?0或1个,相当于{0,1}{m}匹配前一个规则的字符出现m次 边界匹配: 字符功能^匹配字符串开头$匹配字符串结尾\b匹配单词边界\B匹配非单词边界 分组匹配: 字符功能``匹配左右任意一个表达式()将括号中字符作为一个分组

findall()

匹配字符串中所有符合正则的内容(都没找到返回空列表[])。

import re s = '我的号码是:10086,你的号码是10010' list = re.findall(r'\d+', s, re.S) print(list) # ['10086', '10010']

字符串的r标记,表示当前字符串是原始字符串,即内部的转义字符无效而是普通字符。

re.S的作用是让findall()函数在查找时可以自动考虑换行的影响,使得非贪婪匹配可以匹配换行。

re模块中的标志还有:

  • re.IGNORECASE,忽略大小写

  • re.MULTILINE,多行匹配

  • re.DOTALL,作用类似re.S

    通过正则表达式获取图片名称title和图片网址src,res为网页源代码

    p_title = '<img width="100" alt="(.?)"' title = re.findall(p_title, res) p_img = '<img width="100" alt=".?" src="(.*?)"' src= re.findall(p_img, res)

非贪婪匹配:“(.?)”用于提取文本A与文本B之间的内容;“.?”用于代替文本A和文本B之间的内容。

finditer()

匹配字符串中所有符合正则的内容,返回的结果是迭代器。

iter = re.finditer('d+', s) for i in iter: print(i.group())

输出结果如下:

10086 10010

search()

找到一个结果就返回(都没找到返回None),返回结果是match对象。

s = "我的号码是:10086,你的号码是10010" search = re.search("\\d+", s) print(search.span()) # (6, 11) print(search.group()) # 10086

match()

从头开始匹配。

s = '我的号码是:10086,你的号码是10010' m = re.match('\\d+', s) # 匹配不到 s2 = "10086,10010" m2 = re.match("\\d+", s2) print(m2.span()) # (0, 5) print(m2.group()) # 10086

sub()

sub()函数的名称来自英文单词substitute(替换),语法格式:re.sub(需要替换的内容, 替换值, 原字符串)

预加载正则表达式

s = '我的号码是:10086,你的号码是10010' obj = re.compile('d+') ret = obj.finditer(s) for i in ret: print(i.group()) s = "<div class='first'><span id='2'>周杰伦</span></div>" (?P<分组名字>正则)可以单独从正则匹配的内容中进一步提取内容 obj = re.compile("<span id='d+'>(?P<name>.*?)</span>", re.S) result = obj.finditer(s) for i in result: print(i.group("name")) # 结果为:周杰伦

本文作者:a

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!