1.re模块
1.re.findall()
1.基本用法
re.findall(正则匹配的格式,匹配的对象)
2.正则匹配常用格式
1.^
只匹配开头在多行模式中匹配每一行的开头
2.a|b
匹配的格式a或者b
3[]
[a,b]匹配的格式a或者b如果ab为多个值他会把里面的东西打散
[1-9]数字1-9
[a-z]字母a-z
[A-Z]字母A-Z
[^x]内容不等于x
推荐Python大牛在线分享技术 扣qun:855408893
领域:web开发,爬虫,数据分析,数据挖掘,人工智能
4.$
a$ 匹配已a 结尾的
5..
代表任意字符
6.{}
- {n}代表大括号前字符n个
- {n,m}代表大括号前字符n-m个
- {n,}代表大括号前字符n-多个
- {+,}代表大括号前字符1-多个
- {0,}代表大括号前字符0-多个
7.*
代表前面字符0-无穷大个
8.+
代表前面字符1-无穷大个
9.?
- a?代表a字符0-1个
- ?a,前面值是+或者*的时候?匹配内容a结束
10.特殊序列符号
特殊序列符号 | 意义 |
---|---|
\A | 只在字符串开始进行匹配(多行字符串值匹配第一行) |
\Z | 只在字符串结尾进行匹配(多行字符串只匹配最后一行) |
\b | 匹配位于开始或结尾的空字符串 |
\B | 匹配不位于开始或结尾的空字符串 |
\d | 相当于[0-9] |
\D | 相当于[^0-9] |
\s | 匹配任意空字符:[\t\n\r\r\v] |
\S | 匹配任意非空字符:[^\t\n\r\r\v] |
\w | 匹配任意数字和字母:[a-zA-Z0-9] |
\W | 匹配任意非数字和字母:[^a-zA-Z0-9] |
11.()
括号里面什么到时候取什么
12.re.findall(正则匹配的格式,匹配的对象,re.S)
re.S的作用:
不使用re.S时,则只在每一行内进行匹配,如果存在一行没有,就换下一行重新开始,使用re.S参数以后,正则表达式会将这个字符串看做整体,在整体中进行匹配
import re
a = """sdhellolsdlfsdfiooe:
yy988989pythonafsf"""
b = re.findall('hello(.*?)python',a)
c = re.findall('hello(.*?)python',a,re.S)
print (b)
print(c)
输出结果:
b:[]
c:['lsdlfsdfiooe:\nyy988989']
其他参数
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解 |
2.re.match和re.search
# match 和 search的区别,mathch从开头开始匹配找一个,search搜索所有找第一个
3.re.compile
定义某种搜索格式
res1 = re.compile('\d+')
res1.findall(查找对象)等同于re.findall('\d+',查找对象)
4.re.split()
就是字符串的split方法,区别是可以使用正则表达式去替换
5.re.sub和re.subu
就是字符串的replace方法,区别是可以使用正则表达式去替换
import re
s = '猪八戒的媳妇是1高翠兰,孙悟空的媳妇是2白骨精,唐僧的媳妇是3女儿国王,沙悟净6没有媳妇(py9的学生们)'
print(re.sub('\d','',s))
print(re.subn('\d','',s)) # 除了会修改内容,还会返回修改了多少次
猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)
('猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)', 5)
6.对照表
语法 | 意义 | 说明 | ||
---|---|---|---|---|
"." | 任意字符 | |||
"^" | 字符串开始 | '^hello'匹配'helloworld'而不匹配'aaaahellobbb' | ||
"$" | 字符串结尾 | 与上同理 | ||
"*" | 0 个或多个字符(贪婪匹配) | <*>匹配<\title>chinaunix</title> | ||
"+" | 1 个或多个字符(贪婪匹配) | 与上同理 | ||
"?" | 0 个或多个字符(贪婪匹配) | 与上同理 | ||
*?,+?,?? | 以上三个取第一个匹配结果(非贪婪匹配) | <*>匹配<\title> | ||
{m,n} | 对于前一个字符重复m到n次,{m}亦可 | a{6}匹配6个a、a{2,4}匹配2到4个a | ||
{m,n}? | 对于前一个字符重复m到n次,并取尽可能少 | ‘aaaaaa’中a{2,4}只会匹配2个 | ||
"" | 特殊字符转义或者特殊序列 | |||
[] | 表示一个字符集 | [0-9]、[a-z]、[A-Z]、[^0] | ||
" | " | 或 | A | B,或运算 |
(...) | 匹配括号中任意表达式 | |||
(?#...) | 注释,可忽略 | |||
(?=...) | Matches if ... matches next, but doesn't consume the string. | '(?=test)' 在hellotest中匹配hello | ||
(?!...) | Matches if ... doesn't match next. | '(?!=test)' 若hello后面不为test,匹配hello | ||
(?<=...) | Matches if preceded by ... (must be fixed length). | '(?<=hello)test' 在hellotest中匹配test | ||
(?<!...) | Matches if not preceded by ... (must be fixed length). | '(?<!hello)test' 在hellotest中不匹配test |