常用方法:
re.match(参数一,参数二) | 参数一:匹配规则;参二:要匹配的字符串 |
.span() | 常用re.match().span() 返回对应的索引值 |
.group() | 常用re.match().group() 返回匹配后的字符 |
re.search(参一,参二) | 参一:要匹配的对象;参二:字符串 |
re.findall(参一,参二) | 参一:要获得的字符:参二:字符串 |
“匹配三子”的比较:
re.match(参数一,参数二)只能从参数二的开头匹配,返回的是对象,匹配不到返回None
re.search(参一,参二) 默认从左到右开始匹配,返回的是对象,只要找到一个就不在继续
re.findall(参一,参二) 找出所有符合规则的字符,默认从左到右,返回的是列表
示例:
import re
b = '张三天在玩4399小游戏,张三 hello 玩的.很开心'
ress1 = re.match("张三",b)
ress2 = re.search("张三",b)
ress3 = re.findall(r'张三',b)
print(ress1)
print(ress2)
print(ress3)
输出:
<re.Match object; span=(0, 2), match='张三'>
<re.Match object; span=(0, 2), match='张三'>
['张三', '张三']
常用单字符(元字符)如下
. | 匹配任意一个字符(除\n) |
[] | 匹配[]中列举的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字 |
\s | 匹配空白,即 空格,tab键 |
\S | 匹配非空白 |
\w | 匹配单字符,即数字、字母、下划线 |
\W | 匹配非单字符 |
[]字符规则:
1.对于[]中的字符会从左到右逐一匹配
import re
b = '张三天在玩4399小游戏,张三 hello 玩的.很开心'
ress1 = re.findall(r'[54]',b)
ress2 = re.findall(r'[543]',b)
print(ress1)
print(ress2)
['4']
['4', '3']
2.范围,对于[1-9]就相当于\d+
import re
b = '张三天在玩4399小游戏,张三 hello 玩的.很开心'
ress1 = re.findall(r'[1-9]',b)
ress3 = re.search(r'[1-9]',b)
print(ress1)
print(ress3)
输出:
['4', '3', '9', '9']
<re.Match object; span=(5, 6), match='4'>
代表数量的元字符:
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少有1次 |
? | 匹配前一个字符出现0次或者1次,即要么有1次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,} | 匹配前一个字符至少出现m次 |
{m,n} | 匹配前一个字符出现从m到n次 |
注:元字符 ?用于改变贪婪模式
分组匹配:
| | 匹配左右任意一个表达式 |
() | 将括号中的字符作为一个分组 |
那么当使用|时如果左右两端都使用了(),那该如何获取元组内的字符呢,如下
m1 = re.match(".+\"(\w+://\w+\.\d{4}\w+\.com?)\".+>(\w+?)<.+|.+\"(\w+://\w+\.\w+\.\w+\.cn?)\".+>(\w+?)<.+", str1)
获取所有元组内的字符,可以这样写:
m1.group(1,2,3, 4)
尽管|表示一定的or意思,但在分组操作时很特殊,不管有没有|,是第几个元组就用其相应的数字索引即可