元字符metacharacter
. 除换行符外的任意一个字符
[abcd] 集合里的任意一个字符
[^abcd]除集合里的字符的任意一个字符
[a-z] 字符范围,范围内的任意一个字符
\b 单词的边界 例:\ba在文本中找到以a开头的字符,a\b以a结尾的字符
\B 不匹配单词的边界 例:t\B包含t不以t结尾的字符,\Bt含有t不以t开头的字符
\d 任意一位0-9的数字
\D 一位非数字
\s 一位空白字符,包括换行符、制表符、空格
\S 一位非空白字符
\w 匹配[a-zA-Z0-9],包括中文
\W 匹配\w之外的字符
重复
* 重复0次或多次
+ 重复至少一次
?重复0次或1次
{n} 重复n次
{n,} 重复至少n次
{n,m} 重复n-m次
x|y 匹配x或者y
(pattern) 分组,分配组号,从1开始
(?:pattern) 去掉分组,只为改变优先级
(?<name>exp) 给分组命名
零宽断言
(?=exp) 断言exp一定在匹配的右边出现
(?<=exp) 断言exp一定在匹配的左边出现
(?!exp) 断言exp一定不在匹配的右边出现
(?<!exp) 断言exp一定不在匹配的左边出现
断言不占分组号
贪婪和非贪婪
默认是贪婪模式,尽可能多的取
*?匹配任意次,尽可能少重复
+?匹配至少1次,尽可能少重复
?? 匹配0次或1次,尽可能少重复
{n,}? 匹配至少n次,尽可能少重复
{n,m}? 匹配至少n次,至多m次,尽可能少重复
单行模式和多行模式
单行模式:.可以匹配所有字符,包括换行符。
^表示整个字符串的开头,$整个字符串的结尾
多行模式:.不包括换行符
^表示行首,$表示行位
python的RE
使用re模块(import re)
re.M多行模式,re.S单行模式,re.I忽略大小写
编译:re.compile(pattern,flags=0)
regex=re.compile(pattern,flags=0)
单词匹配
re.match(pattern,string,flags=0)
regex.match(string,[2,4])
匹配从字符串的开头匹配,regex可以重新设定开始和结束位置,返回match对象
re.search(pattern,string,flags=0)
regex.search(string,[2,4])
从头搜索直到第一个匹配,regex可以重新设定开始和结束位置,返回match对象
re.fullnmath(pattern,string,flags=0)
regex.fullmatch(string,[2,4])
整个字符串和正则表达式匹配
全部匹配
re.findall(pattern,string,flags=0)
regex.findall(string,[2,4])
整个字符串,从左至右匹配,返回所有匹配项的列表
re.finditer(pattern,string,flags=0)
regex.finditer(string,[2,4])
整个字符串,从左至右匹配,返回所有匹配项,返回迭代器
每次迭代返回的是match对象
匹配替换
re.sub(pattern,replacement,string,count=0,flags=0)
regex.sub(replacement,string,count=0)
使用pattern对字符串string进行匹配,对匹配项使用replacement替换,
replacement可以是string,bytes,function。
re.subn(pattern,replacement,string,count=0,flags=0)
regex.subn(replacement,string,count=0)
同sub 返回一个元组(new_string,number_of_subs_made)
分割字符串
re.split(pattern,string,maxsplit=0,flags=0)
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88245