python正则表达式备忘录

知识来源:《Python编程快速上手 让繁琐工作自动化》

正则表达式是文本模式的描述方法。

1.匹配 例如 452-556-4244

\d\d\d-\d\d\d-\d\d\d\d

#或

\d{3}-\d{3}-\d{4}

\d 匹配一位数字字符,即任何一位0到9的数字。

在一个模式后加{3},表示匹配这个模式三次。

使用事例,如匹配Regex对象:


import re

regex = re.compile(r'\d{3}-\d{3}-\d{4}')

match = regex.search(" number 666-666-6666")

match.group() #得到字符串中的电话

代码第二行的r将该字符串标记为原始字符串,从而不用使用 \来表示\

2.使用括号分组

假设想要将区号从电话号码中分离,用

(\d\d\d)-(\d\d\d-\d\d\d\d)

regex = re.compile(r'\(d{3})-(\d{3}-\d{4}')) match = regex.search(" number 666-666-6666") match.group(1) #得到字符串中的电话区号666

match.group(2)#得到后7位

math.group(0)#得到整个电话号码

math.groups()#返回电话分组的 元组
3.使用管道匹配多个分组,如希望匹配 hello或hi : hello|hi

简写 h(ello|i),可以偷懒少写

4.字符?,表示它前面的分组在这个模式是可选的,即匹配?前面的分组0次或1次。

如 Bat(wo)man 既可以匹配男或女的蝙蝠侠

5.字符,表示之前的分组匹配零次或多次

如 Bat(wo)*man

可以匹配 Batwowowowoman

如 (喔啦)*

可以匹配 空调承太郎的名言 喔啦喔啦喔啦...

6.花括号匹配前面分组特定次数,如(ha){3}

匹配 hahaha

(ha){3,5}表示匹配ha3次或5次,但是如果输入5个ha,优先匹配5个哈,是贪心匹配的。

7.+号前面的分组匹配一次或多次
8.贪心和非贪心匹配

python的正则表达式默认是贪心的,它会尽量匹配最长的字符串。

为了让贪心匹配的(ha){3,5}变成非贪心匹配:

(ha){3,5}? 这样的话有5个ha优先匹配三个

9.findall()用于找到字符串中所有的匹配项,直接返回所有匹配项组成的列表。

例如抓取所有英文单词

import re
regex = re.compile("[a-zA-Z]+")
regex.findall("hello, my name is zw")

>>Out[8]: ['hello', 'my', 'name', 'is', 'zw']
10.建立自己的字符分类

[aeiouAEIOU]可以匹配所有元音字符

也可以使用-短横来表示数字或字母的范围,如

[a-zA-Z0-9]可以匹配所有大小写字母和数字

在[]内最左侧加^可匹配不在这个字符类中的字符

且在[]内不需要转义,即 \ 就用\表示不需要\

11.插入字符 ^ 和美元字符$

^表示匹配必须发生在被查找文本的开始处

$表示匹配必须发生在被查找文本的结尾处

记忆方法 花钱,钱总在最后

12.正则表达式的第二个参数

第二个传入, 如re.compile("\d{6}", xxx), 指其中xxx的位置的参数:

re.DOTALL 可以匹配换行

re.I 或 re.IGNORECASE 可以不区分大小写

re.VERBOSE 可以写可读性较好的正则表达式

13.总结:常用字符分类的缩写代码

() 括号()用于提取括号内匹配的字符串

[] 中括号匹配字符的范围,如[a-zA-Z]找字母

[^xxx] 查找不在[]内的所有字符

{} 表示匹配的长度,如\s{4}匹配四个空格

\d 0到9的任何数字

\D 除0到9的数字以外的任何字符

\w 任何字母、数字和下划线(匹配单词)

\W 除字母、数字或下划线字符外的任何字符

\s 空格、制表符或换行符(匹配空白)

\S 除空格、制表符、或换行符以的任何字符

[0-5] 匹配数字0到5

. 通配符,匹配除了换行之外的所有字符

注意 匹配真正的.需要\. 转义

<组合:> .* 匹配任意文本

re.DOTALL 匹配换行字符

('.*',re.DOTALL) 匹配一切

(?=.*[A-Z]) 断言存在大写字母

| 或

? 匹配零次或一次前面的分组

* 匹配零次或多次前面的分组

+ 匹配一次或多次前面的分组

{n} 匹配n次前面的分组

{n,} 匹配n次或更多次前面的分组

{n,m}匹配至少n次或m次前面的分组

{n,m}?对前面的分组进行非贪心的匹配

^spa 表示字符串必须以spa开始

spa$ 表示字符串必须以spa结束

end-------------------------------------

如果觉得有帮助的话请赞一个吧,你们的快乐是我书写动力(●'◡'●)

你可能感兴趣的:(python正则表达式备忘录)