正则表达式
分类
BRE:基本正则表达式,grep,sed,vi等软件支持,vim有扩展
ERE:扩展正则表达式,egrep,grep -E ,sed r等
PCRE:几乎所有的高级语言都是PCRE的方言或则变种,
基本语法
元字符metacharater
. 匹配除换行符外任意一个字符
[abc]字符集合,只能表示一个字符的位置,匹配所包含的任意一个字符,[abc]匹配plain的a
[^abc] 字符集合,只能表示一个字符的位置。匹配除集合内的。
[a-z]字符范围,也是个集合,表示一个字符位置,匹配所包含的任意一个字符
[^a-z]字符范围,除去集合所包含的
\b单词的边界 \bb在文本中找到单词b开头的b字符
\B不匹配单词的边界,
\d 匹配一位0-9的数字
\D匹配一位0-9非数字
\s匹配一位空白字符[\f\r\t\n\v]
\S匹配一位非空白字符
\w匹配[0-9A-Za-z]包括中文字符
\W匹配除\w之外的字符
转义
凡是在正则表达式中油特殊含义的符号,如果想使用它的本意,请使用\转义。反斜线自身得使用\\
\r\n还是转义后代表回车换行
重复
*表示前面的正则表达式会重复0次:e\w*单词中e后面可以有非空白字符
+表示前面的正则表达式至少重复一次:e\w+单词中e后面只至少有一个非空白字符
?表示前面的正则表达式会重复0次或则一次:e\w? 单词中e后面至多有一个非空白字符
{n}重复固定的n次:
{n,}至少重复n次
{n,m}重复n到m次
X|y 匹配x或者y
(pattern) 使用小括号指定一个子表达式,也叫分组,可以改变优先级
\数字 匹配对应的分组
(?:pattern)如果仅仅为了了改变优先级,就不需要分组
(?<name>exp)(?’name’exp)分组捕获,但是可以通过name访问分组Python语法必须是(?<name>exp)
(?=exp)零宽度正预测先行断言,断言exp一定在匹配的右边出现,也就是说断言后边一定跟个exp
零宽度正回顾后发断言,断言exp一定出现在匹配的左边出现,也就是说前面一定有个exp前缀
(?!exp)零宽度负预测先行断言,断言exp一定不会出现在右侧,也就是说断言后面一定不会出现exp
(?<!exp)零宽度负回顾后发断言,断言exp一定不能出现在左侧,也就是说断言前面一定不能是exp
(?#comment) 注释 f(?=00)(?#这个后断言不捕获)
注意:
断言会不会捕获呢?也就是断言会不会占用分组号呢
断言不会占用分组号,断言如同条件,只是要求匹配必须瞒足断言的条件
分组和捕获不是同一个意思
使用正则表达式,能用简单表达式,就不要用复杂的表达式
贪婪豫非贪婪
默认是贪婪模式,也就是说尽量匹配更长的子串
非贪婪很简单,再重复的符号后面加上一个?就尽量的少匹配了
引擎选项
Ignorecase 匹配时忽略大小写 re.l
Singleline 单行模式。可以匹配所有字符,包括\n re.S
Multiline 多行模式^行首 $行尾 re.M
lgnorePatternwhitespace 忽略表示中的空白字符,如果要使用空白字符,如果要是用空白字符用转义,#可以用来做注释 re.X
编译
re.compile(pattern,flags=0)
设定flags,编译模式,返回正则表达式对象regex
Pattern就是正则表达式字符串,flags是选项,正则表达式需要被编译,为了提高效率,这些编译后的结果被保存,下次使用同样的pattern的时候,就不需要再次编译。
re的其他方法为了提高效率调用的编译方法。就是为了提速
Re.match(pattern,string,flags=0)
match匹配从字符串的开头匹配,regex对象match方法可以重设定开始位置和结束位置。返回match对象
re.search(pattern,string,flags=0)
从开头搜索直到第一个匹配,reges对象search方法可以重设开始位置和结束位置,返回match对象
re.fullmatch(pattern.string,flags=0)
Regex.fullmatch(string[,pos[,endpos]])
整个字符串和正则表达式匹配
re.findall(pattren,string,flags=0)
Regex.findall(string[,pos[,endpos]])
对整个字符串,从左到右匹配,返回所有匹配项的列表
re.finditer(pattren.string,flags=0)
Regex.finditer(string,[,pos[,endpos]])
对整个字符串,从左至右匹配,返回所有的匹配项,返回迭代器
注意每次迭代返回的是match对象。
re.sub(pattern,replacement,string,count=0,flags=0)
Regex.sub(replacement,string,count=0)
使用pattern对字符串string进行匹配,对匹配选项使用repl替换,可以是子串,寒素,bytes
分割字符串
字符串的分割函数,太难用,不能指定多个字符串进行分割
re.split(pattern,string,maxsplit=,flags=0)
re.split分割字符串
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97675