闲来无事,敲两行代码,平生碌碌,唯不负韶华!
正则表达式学习笔记:课程连接
这里使用的语言为python
点的使用
# [.] 点的使用 //可以匹配除了换行符以外任意的字符
如:一个点
import re data = 'tormorrow' pattern = '.' res = re.match(pattern, data) print(res.group())
结果为:t
如两个点
import re data = 'tormorrow' pattern = '..' res = re.match(pattern, data) print(res.group())
结果为:to
找到某一姓氏的名字:
names = '李文', '李商隐', '李白', '小李' pattern = '李.' for name in names: res = re.match(pattern, name) if res: print(res.group()) print(name)
运行结果;
李文
李文
李商
李商隐
李白
李白
中括号的使用
[] 代表匹配集合中的任意一个字符,注意是一个字符
所有小写字母表示:[a-z]
范围表示[c-g] c到g的集合
大写同理;
import re strings = 'hello ' pattern = '[he]' res = re.match(pattern, strings) if res: print(res.group())
运行结果:
h
import re strings = 'echo ' pattern = '[he]' res = re.match(pattern, strings) if res: print(res.group())
运行结果:
e
匹配数字
\d 匹配一个数字 0-9之间的
注意:且匹配有位置要求;
如:
import re strings = '003 ' pattern = '\d' res = re.match(pattern, strings) if res: print(res.group())
结果:0
如:第一个不是数字
import re strings = 'T003 ' pattern = '\d' res = re.match(pattern, strings) if res: print(res.group())
结果:未匹配到
匹配一个非数字
\D 匹配一个非数字,且有位置要求,在第一位
import re strings = '003 ' pattern = '\D' res = re.match(pattern, strings) if res: print(res.group())
运行结果:未匹配到
如:
import re strings = 'T003 'i pattern = '\D' res = re.match(pattern, strings) if res: print(res.group())
运行结果:
T
匹配空格
\s 匹配一个空白空格
如:
strings = '00 3 ' pattern = '\s' res = re.match(pattern, strings) if res: print('匹配到了'+res.group()) else: print('未匹配到')
运行结果:未匹配到
如:
import re strings = ' 00 3 ' pattern = '\s' res = re.match(pattern, strings) if res: print('匹配到了'+res.group()) else: print('未匹配到')
运行结果:匹配到了
匹配非空白字符
\S 大些S 匹配非空白字符
import re strings = ' 00 ' pattern = '\S' res = re.match(pattern, strings) if res: print('匹配到了'+res.group()) else: print('未匹配到')
结果: 未匹配到
import re strings = 'w00 ' pattern = '\S' res = re.match(pattern, strings) if res: print('匹配到了'+res.group()) else: print('未匹配到')
结果:匹配到了w
匹配单词字符
\w 匹配单词字符,比如: a-z 或 A-Z 或 0-9 或 "_" 下划线
\W 匹配非单词字符,于小w正好相反
匹配个数
匹配出现0次或无线次
* " * ": 匹配前一个字符出现 0 次或者无限次,即可有可无
如:
import re strings = 'Hello ' pattern = '[A-Z][A-Z]*' res = re.match(pattern, strings) if res: print('匹配到了'+res.group()) else: print('未匹配到')
结果为:
匹配到了H
如:
import re strings = 'OMG... ' pattern = '[A-Z][A-Z]*' res = re.match(pattern, strings) if res: print('匹配到了'+res.group()) else: print('未匹配到')
结果为:
匹配到了OMG
匹配1次或无限次
+ : "+ " 加号代表匹配1次或者无限次数,即,至少1次
如:
import re strings = 'OMG... ' pattern = '[A-Z][A-Z]+' res = re.match(pattern, strings) if res: print('匹配到了'+res.group()) else: print('未匹配到')
结果:
匹配到了OMG
如:
import re strings = 'Hello... ' pattern = '[A-Z][A-Z]+' res = re.match(pattern, strings) if res: print('匹配到了'+res.group()) else: print('未匹配到')
结果:
未匹配到
小练习:
用正则表达式匹配变量名
分析:变量名由 字母、数字、下划线组成、但是起始位置不可以是 数字
所以:
pattern = '[a-zA-Z_]\w*'
或
pattern = '[a-zA-Z_]+\w*'
如:
import re strings = 'time_99 ' pattern = '[a-zA-Z_]\w*' res = re.match(pattern, strings) if res: print('匹配到了' + res.group()) else: print('未匹配到')
结果:
匹配到了time_99
如:
import re strings = '9_time_99 ' pattern = '[a-zA-Z_]\w*' res = re.match(pattern, strings) if res: print('匹配到了' + res.group()) else: print('未匹配到')
结果:
未匹配到
如:
import re strings = 'time+99 ' pattern = '[a-zA-Z_]\w*' res = re.match(pattern, strings) if res: print('匹配到了' + res.group()) else: print('未匹配到')
结果:匹配到了time
注意:当匹配的时候需要注意是否完全匹配了
匹配1次或者0次
\? 该字符前的字符出现最多1次 最少0次
import re strings = 'i-can' pattern = '[a-zA-Z_][\w]?' res = re.match(pattern, strings) if res: print('匹配到了' + res.group()) else: print('未匹配到')
结果:
匹配到了i
import re strings = 'ican' pattern = '[a-zA-Z_][\w]?' res = re.match(pattern, strings) if res: print('匹配到了' + res.group()) else: print('未匹配到')
结果:匹配到了ic
小练习:
匹配英文字符,遇到数字取一个停止,遇到其他特殊字符直接结束
pattern = '[a-zA-Z_]+[0-9]?'
次数限制
{} :花括号用来描述前导字符匹配的次数
{m}:精确匹配m次
{m,} : 前导字符至少出现m 次
{m,n} : 前导字符出现m 次 到n次
如;
import re strings = '123456777' pattern = '\d{4}' res = re.match(pattern, strings) if res: print('匹配到了' + res.group()) else: print('未匹配到')
结果:匹配到了1234
import re strings = '123456777d' pattern = '\d{4,}' res = re.match(pattern, strings) if res: print('匹配到了' + res.group()) else: print('未匹配到')
结果:
匹配到了123456777
小练习:
匹配邮箱:
import re strings = '1075933062@qq.com' pattern = '[a-zA-Z0-9]{6,11}@qq.com' res = re.match(pattern, strings) if res: print('匹配到了' + res.group()) else: print('未匹配到')
结果:
匹配到了1075933062@qq.com
import re
strings = '1075933062@qq.com'
pattern = '[a-zA-Z0-9]{6,11}@qq.com'
res = re.match(pattern, strings)
if res:
print('匹配到了' + res.group())
else:
print('未匹配到')