正则

语法:re.findall(r'正则的规则','被匹配的对象')
一定要记熟下边的元字符
^a:以a开头的(只找开头),没有就返回空列表[]
A((必须是)在后边):以a结尾(只找结尾), 没有就返回空列表[]
, :找所有,有几个列几个

组:要是组的话用.group()
print(ret.group())

以下几个就是组:
findall():找所有,有几个列几个,列表形式,没有就是空列表
finditer():#组,找所有,放到迭代器里,一个一个取,没有就报错
search()#组,找所有,找到为止,没有报错
match()#组,只找开头,不是就停止查找,就报错

举个例子:

import re
ret = re.match(r'a','cbad')
print(ret.group())
ret = re.finditer(r'ab','abxcab')
print(ret.__next__().group())    #组
print(ret.__next__().group())    #组
for i in ret:
    print(i.group())

{a,b} 意思是前边内容出现m-n次范围 (ab必须挨着)
print(re.findall('a{2,4}b', 'ab aab aaab aacbaaabb'))

结果是: ['aab', 'aaab', 'aaab']
a?b 非贪婪的

print(re.findall('a?b','b ab aab abacdb aaaacb '))

结果是:['b', 'ab', 'ab', 'ab', 'b', 'b']

sub 替换 split 切割 complie

| 替换,"或"操作字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。 |

字符 说明
(abc) capture group,捕获组
backreference to group #n,分组引用,引用第 n 个捕获组匹配的内容, 其中 n 是正整数
(?:abc) non-capturing group,非捕获组

1.4 先行断言

字符 说明
a(?=b) positive lookahead,先行断言,a 只有在 b 前面才匹配
a(?!b) negative lookahead,先行否定断言,a 只有不在 b 前面才匹配

1.5 后行断言

字符 说明
(?<=b)a positive lookbehind,后行断言,a 只有在 b 后面才匹配
(?<!b)a negative lookbehind,后行否定断言,a 只有不在 b 后面才匹配

惰性匹配,就是尽可能少的匹配
以下都是惰性匹配:
{m,n}?
{m,}?
??
+?
*?

1.8 修饰符

字符 说明
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。
u 开启"Unicode 模式",用来正确处理大于uFFFF 的 Unicode 字符。也就是说,会正确处理四个字节的 UTF-16 编码。
s 允许 . 匹配换行符。
y y 修饰符的作用与 g 修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g 修饰符只要剩余位置中存在匹配就可,而 y 修饰符确保匹配必须从剩余的第一个位置开始,这也就是"粘连"的涵义

(a) <=> (a+)* <=> (a)+ <=> a
(a+)+ <=> a+

原文地址:https://www.cnblogs.com/xm-179987734/p/12308304.html