python中正则表达式,使用re模块中三个基础方法来做正则匹配
分别是match、search、findall三个基础方法
-
re.match(匹配规则, 被匹配字符串)
从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息)
-
re.search(匹配规则, 被匹配字符串)
搜索整个字符串,找出匹配的,从前向后找到第一个后就停止,不继续向后
-
re.findall(匹配规则, 被匹配字符串)
匹配整个字符串,找出全部匹配项,如果找不到返回一个空list
- match:
import re
str = "python study"
result = re.match('python', str)
print(result) # <re.Match object; span=(0, 6), match='python'>
print(result.group()) # python
print(result.span()) # (0, 6) // 表示从0开始到第六位结束不包含第六位
str = "1python study python python"
result = re.match('python', str)
print(result) # None 因为match是从开头查找,第一项不匹配就直接返回none了
- search:
str = "1python study python python"
result = re.search('python', str) #
print(result) # <re.Match object; span=(1, 7), match='python'>
print(result.span()) # (1, 7)
print(result.group()) # python
- findall:
str = "1python study python python"
result = re.findall('python', str) #
print(result) # ['python', 'python', 'python']
元字符匹配:
r"""
单字符匹配:
. : 匹配任意一个字符,出了\n,\ . 匹配点本身
[] : 匹配[]中列举的字符
\d : 匹配数字,0-9
\D : 匹配非数字
\s : 匹配空白,即空格、tab键
\S : 匹配非空白
\w : 匹配单词字符,即a-z、A-Z、\0-9、_
\W : 匹配非单词字符
数量匹配
* :匹配前一个规则的字符串出现0至无数次
+ :匹配前一个规则的字符串出现1至无数次
? :匹配前一个规则的字符串出现0次或1次
{m} :匹配前一个规则的字符串出现m次
{m,} :匹配前一个规则的字符串至少出现m次
{m,n} : 匹配前一个规则的字符串出现m到n次
边界匹配:
^ : 匹配字符串开头
$ : 匹配字符串结尾
\b : 匹配一个单词的边界
\B : 匹配费单词边界
分组匹配:
| : 匹配左右任意一个表达式
() : 将括号中字符作为一个分组
"""
演示使用:
str = "1python study @jijoamdomo!1547835——"
result = re.findall(r'\d', str)
print(result) # ['1', '1', '5', '4', '7', '8', '3', '5']
result = re.findall(r'\W', str)
print(result) # [' ', ' ', '@', '!', '—', '—']
result = re.findall(r'[a-zA-z]', str)
print(result) # ['p', 'y', 't', 'h', 'o', 'n', 's', 't', 'u', 'd', 'y', 'j', 'i', 'j', 'o', 'a', 'm', 'd', 'o', 'm', 'o']
示例:匹配一个只有数字或字符组成,长度限制为6到10位的账号。
rule = "^[a-zA-Z0-9]{6,10}$"
str = "15247896"
print(re.findall(rule, str)) # ['15247896']
^ 表示从头开始匹配,$表示匹配到文件结尾,[a-zA-Z0-9]表示字符串中的内容是字母或者数字,{6,10}表示匹配前边规则中出现6-10次,如果字符串成功匹配,则返回一个列表,如果匹配失败,则返回空的[]。