知识来源:《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-------------------------------------
如果觉得有帮助的话请赞一个吧,你们的快乐是我书写动力(●'◡'●)