正则表达式基本语法
使用正则表达式之前需要先导入re模块,此模块中的函数用于检查一个特定的字符串是否匹配给定的表达式。
- \d:匹配数字
import re
string = '322abc'
pattern = re.compile("\d") #\d匹配数字 ,compile()是定义模式(规则)
result = pattern.match(string) #match 匹配
print(result) #result是一条记录<_sre.SRE_Match object; span=(0, 1), match='_'>
print(result.group()) #result.group()显示匹配到的值
2.\D:匹配除数字以外的所有字符
import re
string = '_1abc'
pattern = re.compile("\D") #\D匹配除数字外所有字符
result = pattern.match(string)
print(result)
print(result.group())
3.\w:匹配英文字母,数字,下划线或者汉字
import re
string = '啊_1abc'
pattern = re.compile("\w") #\w匹配一个英文字母,数字或者下划线,汉字
result = pattern.match(string)
#result = pattern.match(string, re.A) #A意思是ASCII,加上之后不能匹配汉字
print(result.group())
4.\W:匹配除数字字母汉字下划线之外的字符
import re
string = ']_1abc'
pattern = re.compile("\W") #\W匹配除数字字母汉字下划线之外的字符
result = pattern.match(string)
print(result.group())
5.\s:匹配空白字符
import re
string = '\n_1abc'
pattern = re.compile("\s") #\s匹配空白字符:\n \r \t \v \f
result = pattern.match(string)
print(result.group()) #输出也是空白字符,可以直接使用result查看
print(result) #<_sre.SRE_Match object; span=(0, 1), match='\n'>
6.\t:匹配制表符\t
import re
string = '\t_1abc'
pattern = re.compile("\t") #\t:匹配制表符\t
result = pattern.match(string)
print(result.group())
print(result)
7.[ ]原子表:放一组原子,彼此地位平等,且仅匹配其中
import re
string = 'pray'
#string = 'pryy' #只匹配原子表中的一个原子,没有匹配到则返回None
pattern = re.compile("pr[ae]y") #[]原子表:放一组原子,彼此地位平等,且仅匹配其中一个原子
result = pattern.match(string)
print(result)
import re
string = 'pray'
#string = 'pryy'
pattern = re.compile("pr[^123]y") #[^]排除原子表:匹配除原子表中字符以外的所有字符
result = pattern.match(string)
print(result)
import re
string = 'przy'
#string = 'pray'
pattern = re.compile("pr[a-z]y") #[a-z]匹配a-z之间的字母,包括a和z
result = pattern.match(string)
print(result)
import re
string = 'pr4y'
#string = 'pray'
pattern = re.compile("pr[a-z0-5]y") #[0-4]匹配0-4之间的字母,包括0和4,范围可以连起来不需要加别的符号
result = pattern.match(string)
print(result)
import re
string = '01234'
#string = 'pray'
pattern = re.compile("[a-z^[0-9]]") #^放在[]里面的字符串中间的时候就是个字符,不代表非的意思,当需要用非时需要放到[]开头
result = pattern.match(string)
print(result)
8.*相关
import re
string = '01111234'
#string = '0001234'
#string = 'pray'
pattern = re.compile("01*") # *0次1次或者多次匹配其前的字符,范围只能到紧邻着他的原子
result = pattern.match(string)
print(result)
import re
string = '01111234'
pattern = re.compile("01+") #1次或多次匹配其前的字符
result = pattern.match(string)
print(result)
#
#
import re
string = '02'
pattern = re.compile("01?") #?:0次或1次匹配其前的字符
result = pattern.match(string)
print(result)
import re
string = 'abdj'
#string = 'xbdj'
pattern = re.compile("a|x") # |:匹配两个或者多个选择
result = pattern.match(string)
print(result)
import re
string = '123'
pattern = re.compile("^\d*$") #匹配以数字开头和以数字结尾的所有字符,^ $: 限定符,^ 限定开头,$限定结尾
result = pattern.findall(string) #findall:查找所有,返回查找结果的列表
print(result)
import re
string = '123666666666667'
pattern = re.compile("1236{3}") #匹配其前原子3次
result = pattern.findall(string)
print(result)
import re
string = '1236666667'
pattern = re.compile("1236{3,5}") #匹配其前原子至少3次,最多5次
result = pattern.findall(string)
print(result)
import re
string = '123666666666667'
pattern = re.compile("1236{3,}") #匹配其前原子至少3次,无上限
result = pattern.findall(string)
print(result)
9.匹配电话号码
import re
string = '电话:010-12345678 电话:053912345678 '
pattern = re.compile("\d{3,4}-?(\d{8})") #():表示只取()里边的结果,别的不要:只对findall有效,对match无效
result = pattern.findall(string)
print(result)
10.转义字符\陷阱
import re
a = '\\\\'
p = re.compile(r'\\\\') #r:原始的意思,以后写正则表达式都要加r
r = p.match(a)
print(r) #如果不加上边那个r,输出r.group()时,匹配出来的‘\\'会自动转义成一个'\'
print(r.group())
11.一个小.的使用
import re
a = 'abc'
p = re.compile(r'.') # . :匹配除换行(\n)之外的任何一个字符
r = p.match(a)
print(r.group())
12.HTML文本匹配
import re
a = '<div>北京</div><div>南京</div>'
p = re.compile(r'<\w+>(.*?)</\w+>') # .*? :非贪婪 .*:贪婪
#p = re.compile(r'<\w+>(.*)</\w+>')
r = p.findall(a)
print(r)
import re
a = '<div>北京</div><div>南京</yyy>'
p = re.compile(r'<(\w+)>(.*?)</\1>') # 匹配组:(\w+)和\1(\1表示第一个括号里边的原子)
r = p.findall(a)
print(r)
13.IP地址匹配
import re
string = '192.168.1.2 255.10.10.7 10.10.192.1'
p = re.compile(r'(\d{1,3}(\.\d{1,3}){3}).*')
r = p.match(string)
#r = p.findall(string)
print(r)