栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python--正则表达式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python--正则表达式

正则表达式

元字符字符转义后向引用零宽断言贪婪与懒惰尚未详细讨论的语法模块中的核心函数总结超好用的测试正则的软件

元字符

b:代表单词的开头或结尾,为单词的交界处;虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。.:匹配除了换行符以外的任意字符。*:代表的是数量——它指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配,匹配重复任意次(可能是0次)。.*:任意数量的不包含换行的字符。+:同*,但匹配重复1次或更多次。-不是元字符,只匹配它本身——连字符(或者减号,或者中横线,或者随你怎么称呼它)。 字符转义

如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用来取消这些字符的特殊意义。因此,你应该使用.和*。当然,要查找本身,你也得用\.

后向引用

后向引用用于重复搜索前面某个分组匹配的文本。如匹配go go或自己指定子表达式的组名

零宽断言

零宽度正预测先行断言:(?=exp),它断言自身出现的位置的后面能匹配表达式exp。
例:bw+(?=ingb),匹配以ing结尾的单词的前面部分(除了ing以外的部分);搜索I'm singing while you're dancing.,匹配sing和danc。

零宽度正回顾后发断言:(?<=exp),它断言自身出现的位置的前面能匹配表达式exp。
例:(?<=bre)w+b,匹配以re开头的单词的后半部分(除了re以外的部分);搜索reading a book,匹配ading。
例:((?<=d)d{3})+b,要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了),查找需要在前面和里面添加逗号的部分;搜索1234567890,匹配234567890。
例:(?<=s)d+(?=s),匹配以空白符间隔的数字(再次强调,不包括这些空白符)。

负向零宽断言:只是想要确保某个字符没有出现,但并不想去匹配它。
例:bw*q[^u]w*b,匹配里面出现了字母q,但是q后面跟的不是字母u的单词;搜索Iraq,Benq,匹配Iraq。

零宽度负预测先行断言:(?!exp),断言此位置的后面不能匹配表达式exp。
例:d{3}(?!d),匹配三位数字,而且这三位数字的后面不能是数字。
例:b((?!abc)w)+b,匹配不包含连续字符串abc的单词。

零宽度负回顾后发断言:(? 例:(?

例:(?<=<(w+)>).*(?=),匹配不包含属性的简单HTML标签内里的内容。

(?<=    # 断言要匹配的文本的前缀
<(w+)> # 查找尖括号括起来的内容
        # (即HTML/XML标签)
)       # 前缀结束
.*      # 匹配任意文本
(?=     # 断言要匹配的文本的后缀
  # 查找尖括号括起来的内容
        # 查找尖括号括起来的内容
)       # 后缀结束
贪婪与懒惰

规则:最先开始的匹配拥有最高的优先权。贪婪匹配:当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。
例:a.*b,匹配最长的以a开始,以b结束的字符串;搜索aabab,匹配整个字符串aabab。懒惰匹配:匹配尽可能少的字符。例:a.*?b,匹配最短的,以a开始,以b结束的字符串;搜索aabab,匹配aab。

查找项正则表达式
hibhib
hi后面不远处跟着一个Lucybhib.*bLucyb
匹配1个或更多连续的数字d+
填写的QQ号必须为5位到12位数字^d{5,12}$
匹配3位区号的电话号码(0d{2}d)[- ]?d{8}|0d{2}[- ]?d{8}
描述一个正确的IP地址((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)
kitty kitty或者go gob(w+)bs+1b
自己指定子表达式的组名b(?w+)bs+kb
尚未详细讨论的语法
代码/语法说明
a报警字符(打印它的效果是电脑嘀一声)
b通常是单词分界位置,但如果在字符类里使用代表退格
t制表符,Tab
r回车
v竖向制表符
f换页符
n换行符
eEscape
nnASCII代码中八进制代码为nn的字符
xnnASCII代码中十六进制代码为nn的字符
unnnnUnicode代码中十六进制代码为nnnn的字符
cNASCII控制字符。比如cC代表Ctrl+C
A字符串开头(类似^,但不受处理多行选项的影响)
Z字符串结尾或行尾(不受处理多行选项的影响)
z字符串结尾(类似$,但不受处理多行选项的影响)
G当前搜索的开头
p{name}Unicode中命名为name的字符类,例如p{IsGreek}
(?>exp)贪婪子表达式
(?-exp)平衡组
(?im-nsx:exp)在子表达式exp中改变处理选项
(?im-nsx)为表达式后面的部分改变处理选项
(?(exp)yes|no)把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
(?(exp)yes)同上,只是使用空表达式作为no
(?(name)yes|no)如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes)同上,只是使用空表达式作为no
模块中的核心函数
函数说明
compile(pattern, flags=0)编译正则表达式返回正则表达式对象
match(pattern, string, flags=0)用正则表达式匹配字符串 成功返回匹配对象 否则返回None
search(pattern, string, flags=0)搜索字符串中第一次出现正则表达式的模式 成功返回匹配对象 否则返回None
split(pattern, string, maxsplit=0, flags=0)用正则表达式指定的模式分隔符拆分字符串 返回列表
sub(pattern, repl, string, count=0, flags=0)用指定的字符串替换原字符串中与正则表达式匹配的模式 可以用count指定替换的次数
fullmatch(pattern, string, flags=0)match函数的完全匹配(从字符串开头到结尾)版本
findall(pattern, string, flags=0)查找字符串所有与正则表达式匹配的模式 返回字符串的列表
finditer(pattern, string, flags=0)查找字符串所有与正则表达式匹配的模式 返回一个迭代器
purge()清除隐式编译的正则表达式的缓存
re.I / re.IGNORECASE忽略大小写匹配标记
re.M / re.MULTILINE多行匹配标记
re.S / re.SINGLELINE单行匹配标识
IgnorePatternWhitespace忽略空白匹配
ExplicitCapture显式捕获,仅捕获已被显式命名的组
总结
符 号解释示例说明
.匹配任意字符b.t可以匹配bat / but / b#t / b1t等
w匹配字母/数字/下划线bwt可以匹配bat / b1t / b_t等,但不能匹配b#t
s匹配空白字符(包括r、n、t等)lovesyou可以匹配love you
d匹配数字dd可以匹配01 / 23 / 99等
b匹配单词的边界bTheb
^匹配字符串的开始^The可以匹配The开头的字符串
$匹配字符串的结束.exe$可以匹配.exe结尾的字符串
W匹配非字母/数字/下划线bWt可以匹配b#t / b@t等,但不能匹配but / b1t / b_t等
S匹配非空白字符loveSyou可以匹配love#you等,但不能匹配love you
D匹配非数字dD可以匹配9a / 3# / 0F等
B匹配非单词边界BioB
[]匹配来自字符集的任意单一字符[aeiou]可以匹配任一元音字母字符
[^]匹配不在字符集中的任意单一字符[^aeiou]可以匹配任一非元音字母字符
*匹配0次或多次w*
+匹配1次或多次w+
?匹配0次或1次w?
{N}匹配N次w{3}
{M,}匹配至少M次w{3,}
{M,N}匹配至少M次至多N次w{3,6}
|分支foo|bar可以匹配foo或者bar
(?#)注释
(exp)匹配exp并捕获到自动命名的组中
(?exp)匹配exp并捕获到名为name的组中
(?:exp)匹配exp但是不捕获匹配的文本
(?=exp)匹配exp前面的位置bw+(?=ing)可以匹配I'm dancing中的danc
(?<=exp)匹配exp后面的位置(?<=bdanc)w+b可以匹配I love dancing and reading中的第一个ing
(?!exp)匹配后面不是exp的位置
(?匹配前面不是exp的位置
*?重复任意次,但尽可能少重复a.*b,a.*?b将正则表达式应用于aabab,前者会匹配整个字符串aabab,后者会匹配aab和ab两个字符串
+?重复1次或多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{M,N}?重复M到N次,但尽可能少重复
{M,}?重复M次以上,但尽可能少重复

注意:如果需要匹配的字符是正则表达式中的特殊字符,那么可以使用进行转义处理,例如想匹配小数点可以写成.就可以了,因为直接写.会匹配任意字符;同理,想匹配圆括号必须写成(和),否则圆括号被视为正则表达式中的分组。

超好用的测试正则的软件

百度网盘下载链接:https://pan.baidu.com/s/11jF03jPcrGxgGhNgciB6qQ;
提取码:nz29。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739536.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号