python 正则表达式 findallfindall匹配问题

只需一步,快速开始
后使用快捷导航没有帐号?
查看: 12408|回复: 30
Python3 正则表达式特殊符号及用法(详细列表)
签到天数: 1803 天[LV.Master]伴坛终老
马上注册加入鱼C,享用更多服务吧^_^
才可以下载或查看,没有帐号?
Python3 正则表达式特殊符号及用法(详细列表)
正则表达式的强大之处在于特殊符号的应用,特殊符号定义了字符集合、子组匹配、模式重复次数。正是这些特殊符号使得一个正则表达式可以匹配字符串集合而不只是一个字符串。
注1:为了便于理解,难点的地方均用斜体举了栗子。
注2:如果你对正则表达式一头雾水或者看不懂下边这个列表,那么小甲鱼极力推荐你先学习这个:
字符含义. 表示匹配除了换行符外的任何字符
注:通过设置 re.DOTALL 标志可以使 . 匹配任何字符(包含换行符)|A | B,表示匹配正则表达式 A 或者 B^1. (脱字符)匹配输入字符串的开始位置
2. 如果设置了 re.MULTILINE 标志,^ 也匹配换行符之后的位置$1. 匹配输入字符串的结束位置
2. 如果设置了 re.MULTILINE 标志,$ 也匹配换行符之前的位置\ 1. 将一个普通字符变成特殊字符,例如 \d 表示匹配所有十进制数字
2. 解除元字符的特殊功能,例如 \. 表示匹配点号本身
3. 引用序号对应的子组所匹配的字符串
4. 详见下方列举[...] 字符类,匹配所包含的任意一个字符
注1:连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位则仅作为普通字符
注2:特殊字符仅有反斜线 \ 保持特殊含义,用于转义字符。其它特殊字符如 *、+、? 等均作为普通字符匹配
注3:脱字符 ^ 如果出现在首位则表示匹配不包含其中的任意字符;如果 ^ 出现在字符串中间就仅作为普通字符匹配
{M,N} M 和 N 均为非负整数,其中 M &= N,表示前边的 RE 匹配 M ~ N 次
注1:{M,} 表示至少匹配 M 次
注2:{,N} 等价于 {0,N}
注3:{N} 表示需要匹配 N 次* 匹配前面的子表达式零次或多次,等价于 {0,}+ 匹配前面的子表达式一次或多次,等价于 {1,}? 匹配前面的子表达式零次或一次,等价于 {0,1}*?, +?, ?? 默认情况下 *、+ 和 ? 的匹配模式是贪婪模式(即会尽可能多地匹配符合规则的字符串);*?、+? 和 ?? 表示启用对应的非贪婪模式。
举个栗子:对于字符串 &FishCCC&,正则表达式 FishC+ 会匹配整个字符串,而 FishC+? 则匹配 &FishC&。{M,N}? 同上,启用非贪婪模式,即只匹配 M 次(...)匹配圆括号中的正则表达式,或者指定一个子组的开始和结束位置
注:子组的内容可以在匹配之后被 \数字 再次引用
举个栗子:(\w+) \1 可以字符串 && 中的 &FishC FishC&(注意有空格)(?...)(? 开头的表示为正则表达式的扩展语法(下边这些是 Python 支持的所有扩展语法)(?aiLmsux) 1. (? 后可以紧跟着 'a','i','L','m','s','u','x' 中的一个或多个字符,只能在正则表达式的开头使用
2. 每一个字符对应一种匹配标志:re-A(只匹配 ASCII 字符),re-I(忽略大小写),re-L(区域设置),re-M(多行模式), re-S(. 匹配任何符号),re-X(详细表达式),包含这些字符将会影响整个正则表达式的规则
3. 当你不想通过 re.compile() 设置正则表达式标志,这种方法就非常有用啦
注意,由于 (?x) 决定正则表达式如何被解析,所以它应该总是被放在最前边(最多允许前边有空白符)。如果 (?x) 的前边是非空白字符,那么 (?x) 就发挥不了作用了。(?:...) 非捕获组,即该子组匹配的字符串无法从后边获取(?P&name&...) 命名组,通过组的名字(name)即可访问到子组匹配的字符串(?P=name)反向引用一个命名组,它匹配指定命名组匹配的任何内容 (?#...) 注释,括号中的内容将被忽略(?=...) 前向肯定断言。如果当前包含的正则表达式(这里以 ... 表示)在当前位置成功匹配,则代表成功,否则失败。一旦该部分正则表达式被匹配引擎尝试过,就不会继续进行匹配了;剩下的模式在此断言开始的地方继续尝试。
举个栗子:love(?=FishC) 只匹配后边紧跟着 &FishC& 的字符串 &love&(?!...) 前向否定断言。这跟前向肯定断言相反(不匹配则表示成功,匹配表示失败)。
举个栗子:FishC(?!\.com) 只匹配后边不是 &.com& 的字符串 &FishC&
(?&=...)后向肯定断言。跟前向肯定断言一样,只是方向相反。
举个栗子:(?&=love)FishC 只匹配前边紧跟着 &love& 的字符串 &FishC&(?&!...) 后向否定断言。跟前向肯定断言一样,只是方向相反。
举个栗子:(?&!FishC)\.com 只匹配前边不是 &FishC& 的字符串 &.com&(?(id/name)yes-pattern|no-pattern) 1. 如果子组的序号或名字存在的话,则尝试 yes-pattern 匹配模式;否则尝试 no-pattern 匹配模式
2. no-pattern 是可选的
举个栗子:(&)?(\w+@\w+(?:\.\w+)+)(?(1)&|$) 是一个匹配邮件格式的正则表达式,可以匹配 && 和 '',但是不会匹配 '&' 或 '&'\ 下边列举了由字符 '\' 和另一个字符组成的特殊含义。注意,'\' + 元字符的组合可以解除元字符的特殊功能\序号1. 引用序号对应的子组所匹配的字符串,子组的序号从 1 开始计算
2. 如果序号是以 0 开头,或者 3 个数字的长度。那么不会被用于引用对应的子组,而是用于匹配八进制数字所表示的 ASCII 码值对应的字符
举个栗子:(.+) \1 会匹配 &FishC FishC& 或 &55 55&,但不会匹配 &FishCFishC&(注意,因为子组后边还有一个空格)\A 匹配输入字符串的开始位置\Z 匹配输入字符串的结束位置\b 匹配一个单词边界,单词被定义为 Unidcode 的字母数字或下横线字符
举个栗子:\bFishC\b 会匹配字符串 &love FishC&、FishC.& 或 &(FishC)&\B 匹配非单词边界,其实就是与 \b 相反
举个栗子:py\B 会匹配字符串 &python&、&py3&&&或 &py2&,但不会匹配 &py&&&、&py.& 或&&&py!&\d1. 对于 Unicode(str 类型)模式:匹配任何一个数字,包括 [0-9] 和其他数字字符;如果开启了 re.ASCII 标志,就只匹配 [0-9]
2. 对于 8 位(bytes 类型)模式:匹配 [0-9] 中任何一个数字\D匹配任何非 Unicode 的数字,其实就是与 \d 相反;如果开启了 re.ASCII 标志,则相当于匹配 [^0-9]\s 1. 对于 Unicode(str 类型)模式:匹配 Unicode 中的空白字符(包括 [ \t\n\r\f\v] 以及其他空白字符);如果开启了 re.ASCII 标志,就只匹配 [ \t\n\r\f\v]
2. 对于 8 位(bytes 类型)模式:匹配 ASCII 中定义的空白字符,即 [ \t\n\r\f\v]\S匹配任何非 Unicode 中的空白字符,其实就是与 \s 相反;如果开启了 re.ASCII 标志,则相当于匹配 [^ \t\n\r\f\v]\w 1. 对于 Unicode(str 类型)模式:匹配任何 Unicode 的单词字符,基本上所有语言的字符都可以匹配,当然也包括数字和下横线;如果开启了 re.ASCII 标志,就只匹配 [a-zA-Z0-9_]
2. 对于 8 位(bytes 类型)模式:匹配 ASCII 中定义的字母数字,即 [a-zA-Z0-9_]\W 匹配任何非 Unicode 的单词字符,其实就是与 \w 相反;如果开启了 re.ASCII 标志,则相当于 [^a-zA-Z0-9_]转义符号 正则表达式还支持大部分 Python 字符串的转义符号:\a,\b,\f,\n,\r,\t,\u,\U,\v,\x,\\
注1:\b 通常用于匹配一个单词边界,只有在字符类中才表示“退格”
注2:\u 和 \U 只有在 Unicode 模式下才会被识别
注3:八进制转义(\数字)是有限制的,如果第一个数字是 0,或者如果有 3 个八进制数字,那么就被认为是八进制数;其他情况则被认为是子组引用;至于字符串,八进制转义总是最多只能是 3 个数字的长度
支持楼主!
感谢楼主无私奉献!
支持楼主!
感谢楼主无私奉献!
感谢楼主无私奉献!
本帖被以下淘专辑推荐:
& |主题: 5, 订阅: 2
& |主题: 8, 订阅: 0
& |主题: 1, 订阅: 0
& |主题: 1, 订阅: 0
& |主题: 1, 订阅: 0
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 85 天[LV.6]常住居民II
哈哈,支持一下下,支持小甲鱼
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 8 天[LV.3]偶尔看看II
re.search(r'ab{3, 10}c', 'abbbbbbc')
re.search(r'ab{3,10}c', 'abbbbbbc')复制代码
大括号里面加了个空格就不对了
谢谢朋友指出~
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 302 天[LV.8]以坛为家I
来支持小甲鱼
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 186 天[LV.7]常住居民III
支持小甲鱼{:1_1:}
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 5 天[LV.2]偶尔看看I
第57解课,看匹配ip的时候想到一个方法
import re
re.search(r'([0-9]{1,3}\.){3}([0-9]{1,3})','192.12.131.9')复制代码
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 1803 天[LV.Master]伴坛终老
第57解课,看匹配ip的时候想到一个方法
这样会匹配 999.999.999.999 这样的无效 ip。
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 5 天[LV.2]偶尔看看I
学了小甲鱼的正则学以致用,抓取代理ip,:lol:有什么可以优化的还要请小甲鱼老师指导
import urllib.request
import re
head = {}
head['User-Agent']='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
data = {}
url = '/'
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url,data,head)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
listip = re.findall(r&&tr&.+?&/tr&&,html,re.S)
#print(listip)
for each in listip:
& & li = re.findall(r&&td&.+?&/td&&,each,re.S)
& & if len(li):
& && &&&ip = re.search(r'(([0-9]{1,3}\.){3}([0-9]{1,3}))',li[0])
& && &&&if ip:
& && && && &port = re.search(r'[0-9]{1,5}',li[1])
& && && && &print(ip.group(0)+&:&+port.group(0))
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 40 天[LV.5]常住居民I
支持小甲鱼
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 113 天[LV.6]常住居民II
支持楼主,感谢分享!
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 2 天[LV.1]初来乍到
支持下,辛苦了!
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 12 天[LV.3]偶尔看看II
支持 小甲鱼老师~~
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 13 天[LV.3]偶尔看看II
好,记入我的Python语法学习先,
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 312 天[LV.8]以坛为家I
支持呦,python!!!
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 397 天[LV.9]以坛为家II
复制不了?
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 23 天[LV.4]偶尔看看III
支持楼主:ton:
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 57 天[LV.5]常住居民I
:big支持支持支持
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 10 天[LV.3]偶尔看看II
甲鱼。。。。。。。。。。。。
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 57 天[LV.5]常住居民I
:lol::lol:支持小甲鱼
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 57 天[LV.5]常住居民I
{:1_1:}{:1_1:}谢谢小甲鱼,爱你
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
•••(
Powered by8060人阅读
正则表达式(10)
一些regular的tips:
1 非贪婪flag
&&& re.findall(r&a(+?)&,&a23b&)
# 非贪婪模式
&& & & &['2']
&&& re.findall(r&a(+)&,&a23b&)
&& & & &['23']
注意比较这种情况:
&&& re.findall(r&a(+)b&,&a23b&)
&& & & &['23']
&&& re.findall(r&a(+?)b&,&a23b&)
#如果前后均有限定条件,则非匹配模式失效
&& & & &['23']
2 如果你要多行匹配,那么加上re.S和re.M标志
re.S:.将会匹配换行符,默认.逗号不会匹配换行符
&&& re.findall(r&a(+)b.+a(+)b&,&a23ba34b&)
&& & & &[]
&&& re.findall(r&a(+)b.+a(+)b&,&a23ba34b&,re.S)
&& & & &[('23','34')]
re.M:^$标志将会匹配每一行,默认^只会匹配符合正则的第一行;默认$只会匹配符合正则的末行
&&& re.findall(r&^a(+)b&,&a23ba34b&)
&& & & &['23']
&&& re.findall(r&^a(+)b&,&a23ba34b&,re.M)
&& & & &['23','34']
但是,如果没有^标志,
&&& re.findall(r&a(\d+)b&,&a23b\na34b&)
&& & & &['23','43']
可见,是无需re.M
n='''12 drummers drumming,
11 pipers piping, 10 lords a-leaping'''
pile('^\d+')
p_pile('^\d+',re.MULTILINE) #设置 MULTILINE 标志
print re.findall(p,n)& #['12']
print re.findall(p_multi,n) # ['12', '11']
============================
a = 'a23b'
print re.findall('a(\d+?)',a)& #['2']
print re.findall('a(\d+)',a) #['23']
print re.findall(r'a(\d+)b',a) #['23']
print re.findall(r'a(\d+?)b',a) # ['23']
============================
b='a23b\na34b'
''' . 匹配非换行符的任意一个字符'''
print re.findall(r'a(\d+)b.+a(\d+)b',b) #[]
print re.findall(r'a(\d+)b',b,re.M) # ['23', '34']
print re.findall(r'^a(\d+)b',b,re.M) # ['23', '34']
print re.findall(r'a(\d+)b',b) #['23','34'] 可以匹配多行
print re.findall(r'^a(\d+)b',b) # ['23'] 默认^只会匹配符合正则的第一行
print re.findall(r'a(\d+)b$',b) # ['34'] 默认$只会匹配符合正则的末行
print re.findall(r'a(\d+)b',b,re.M) #['23', '34']
print re.findall(r'a(\d+)b.?',b,re.M)& # ['23', '34']
print re.findall(r&a(\d+)b&, &a23b\na34b&)& # ['23', '34']
============================
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:557713次
积分:6980
积分:6980
排名:第2136名
原创:189篇
转载:197篇
评论:35条
(1)(4)(3)(1)(1)(3)(1)(1)(5)(3)(2)(2)(2)(2)(16)(19)(28)(33)(25)(20)(26)(35)(22)(38)(30)(14)(13)(7)(13)(15)(2)Python正则表达式分组匹配与后向引用问题?
要匹配一段话所有以p开头,以q结尾,中间含有两个重复字母的单词,那应该这么写:p\w*(\w{2})\1\w*q (后向引用) 可是这样findall只匹配()内的东西,这时除了finditer外还能怎么办?
你是说匹配整个模式?整体再加个括号试试
已有帐号?
无法登录?
社交帐号登录二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(12720)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'python 正则表达式匹配字母和数字',
blogAbstract:'&&& s=\"ADAR343212\"&&& import re&&& re.findall(r\"[A-Z]{2}\",s)&&&&&&&&&&&&&&&&&&& #匹配两个大写字母[\'AD\', \'AC\', \'AR\', \'AR\']&&& re.findall(r\"[A-Z]{2}[0-9]{6}\",s)&&&&&&&& #匹配两个大写字母加6个数字[\'AD123453\', \'AC342123\', \'AR343212\']&&& re.findall(r\"[A-Z]{2}[0-9]{6}$\",s)&&&&&& #加上$表示以两个大写字母加两个数字结尾[\'AR343212\'][a-z] //匹配所有的小写字母 [A-Z] //匹配所有的大写字母 ',
blogTag:'python,正则表达式,匹配,查找,字母数字',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}精确匹配和最小匹配_python正则表达式学习笔记_Python学习_编程语言学习__
1.2.1精确匹配和最小匹配
Python正则式还可以精确指定匹配的次数。指定的方式是
精确匹配m次
匹配最少m次,最多n次。(n&m)
如果你只想指定一个最少次数或只指定一个最多次数,你可以把另外一个参数空起来。比如你想指定最少3次,可以写成 {3,} (注意那个逗号),同样如果只想指定最大为5次,可以写成{,5},也可以写成{0,5}。
例 寻找下面字符串中
2位数到4位数
5位数以上的数
4位数以下的数
>>> s= ‘ 1 22 333
>>> re.findall( r’\b\d{3}\b’ , s ) # a:3位数
>>> re.findall( r’\b\d{2,4}\b’ , s ) # b: 2位数到4位数
['22', '333', '4444']
>>> re.findall( r’\b\d{5,}\b’, s ) # c: 5位数以上的数
['55555', '666666']
>>> re.findall( r’\b\d{1,4}\b’ , s ) # 4位数以下的数
['1', '22', '333', '4444']
&*?& &+?& &??& 最小匹配
&+& &?&通常都是尽可能多的匹配字符。有时候我们希望它尽可能少的匹配。比如一个c语言的注释 &/* part 1 */ /* part 2
*/&,如果使用最大规则:
>>> s =r ‘/* part 1 */ code /* part 2 */’
>>> re.findall( r’/\*.*\*/’ , s )
[‘/* part 1 */ code /* part 2 */’]
结果把整个字符串都包括进去了。如果把规则改写成
>>> re.findall( r’/\*.*?\*/’ , s ) #在*后面加上?,表示尽可能少的匹配
['/* part 1 */', '/* part 2 */']
结果正确的匹配出了注释里的内容

我要回帖

更多关于 python3 re.findall 的文章

 

随机推荐