目录
1、正则表达式语法¶
2、Python正则表达式
1>一般字符
2>字符集合
先看图片,大概了解一下正则表达的整体规则
一般字符串,就是特殊制定,根据特殊的字符串进行识别
PS:python进行正则表达的一般步骤
指定好匹配的模式-pattern
选择相应的方法-match,search等
得到匹配结果-group
设定一个输入:input ,并导入需要的re包
import re
input = 'python学习很重要,正则表达也很重要 。 12abcABC789'
pattern = re.compile(r'正则表达')
re.findall(pattern,input)
out: ['正则表达']
pattern = re.compile(r'[abc]')
re.findall(pattern,input)
out: ['a', 'b', 'c']
pattern = re.compile(r'[a-z]')
re.findall(pattern,input)
out: ['p', 'y', 't', 'h', 'o', 'n', 'a', 'b', 'c']
pattern = re.compile(r'[a-zA-Z]')
re.findall(pattern,input)
out: ['p', 'y', 't', 'h', 'o', 'n', 'a', 'b', 'c', 'A', 'B', 'C']
^非的用法
pattern = re.compile(r'[^a-zA-Z]')
re.findall(pattern,input)
out: ['学', '习', '很', '重', '要', ',', '正', '则', '表', '达', '也', '很', '重', '要', ' ', '。', ' ', '1', '2', '7', '8', '9']
或方法
将两个规则并列起来,以‘ | ’连接,表示只要满足其中之一就可以匹配。
pattern = re.compile(r'[a-zA-Z]|[0-9]')
re.findall(pattern,input)
out : ['p', 'y', 't', 'h', 'o', 'n', '1', '2', 'a', 'b', 'c', 'A', 'B', 'C', '7', '8', '9']
匹配数字 ‘\d’ 等价于 [0-9]
pattern = re.compile(r'\d')
re.findall(pattern,input)
out: ['1', '2', '7', '8', '9']
‘\D’ 匹配非数字
pattern = re.compile(r'\D')
re.findall(pattern,input)
out: ['p', 'y', 't', 'h','o', 'n', '学', '习', '很', '重', '要', ',', '正', '则', '表', '达', '也', '很', '重', '要', ' ', '。', ' ', 'a', 'b', 'c', 'A', 'B','C']
‘\W’ 匹配非字母和数字
pattern = re.compile(r'\W')
re.findall(pattern,input)
out: [',', ' ', '。', ' ']
‘\s’ 匹配间隔符
pattern = re.compile(r'\s')
re.findall(pattern,input)
out:[' ', ' ']
重复
正则式可以匹配不定长的字符串
‘*’ 0 或多次匹配
pattern = re.compile(r'\d*')
re.findall(pattern,input)
out: ['', '', '', '', '', '', '', '', '','', '', '', '', '', '', '', '', '', '', '', '', '', '12', '', '', '', '', '', '', '789', '']
‘+’ 1 次或多次匹配
pattern = re.compile(r'\d+')
re.findall(pattern,input)
out: ['12', '789']
‘?’ 0 或 1 次匹配
pattern = re.compile(r'\d?')
re.findall(pattern,input)
out:
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '2', '', '', '', '', '', '', '7', '8', '9', '']
精确匹配和最小匹配¶
‘{m}’ 精确匹配 m 次
pattern = re.compile(r'\d{3}')
re.findall(pattern,input)
out: ['789']
{m,n}’ 匹配最少 m 次,最多 n 次。 (n>m)
pattern = re.compile(r'\d{1,3}')
re.findall(pattern,input)
['12', '789']