栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

正则表达式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

正则表达式

内容概览
  • 正则表达式
  • 正则表达式之字符组
  • 正则表达式之特殊符号
  • 正则表达式之量词
  • 贪婪匹配与非贪婪匹配
  • 取消转移
正则表达式
正则表达式是单独的一门学科
主要的作用是在编写处理字符串的时候,有时会去查找一些有着复杂规则的字符串,用正则使用一些符号的组合产生特殊的含义,帮助我们去查找筛选到符合条件的数据

###正则表达式之字符组

import re
"""可以在中括号内填入任意数据值,数据值之间都是或的关系"""
# [0-9]  匹配从0到9任意一个数字,是[0123456789]的简写
res = re.findall('[0-9]', 'aAbBcCdD1234')
print(res)  # ['1', '2', '3', '4']
# [a-z]  匹配从a到z任意一个字母,是[abcd...xyz]的简写
res = re.findall('[a-z]', 'aAbBcCdD1234')
print(res)  # ['a', 'b', 'c', 'd']
# [A-Z]  匹配从A到Z任意一个字母,是[ABCD...XYZ]的简写
res = re.findall('[A-Z]', 'aAbBcCdD1234')
print(res)  # ['A', 'B', 'C', 'D']
# [0-9a-zA-z]  匹配从0到9从a到z从A到Z之间任意一个字符
res = re.findall('[0-9a-zA-z]', 'aAbBcCdD1234')
print(res)  # ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', '1', '2', '3', '4']
"""在没有使用量词的情况下,默认一次查找一个数据值"""
正则表达式之特殊符号
import re

# .		匹配除了换行符以外的任意字符
res = re.findall('.', 'aAbBcCdD1234_一二三')
print(res)  # ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', '1', '2', '3', '4', '_', '一', '二', '三']
# w	匹配数字字母或下划线
res = re.findall('w', 'aAbBcCdD1234_一二三')
print(res)  # ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', '1', '2', '3', '4', '_', '一', '二', '三']
# W	匹配除了数字字母或下划线以外的字符
res = re.findall('W', 'aAbBcCdD1234_一二三n')
print(res)  # ['n']
"""w匹配的是能组成单词的字符,在python3 中re默认支持的是unicode字符集,当然也支持汉字。"""
# d	匹配数字
res = re.findall('d', 'aAbBcCdD1234_一二三')
print(res)  # ['1', '2', '3', '4']
# D	匹配数字以外的字符
res = re.findall('D', 'aAbBcCdD1234_一二三')
print(res)  # ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', '_', '一', '二', '三']
# ^		匹配字符串开头
res = re.findall('^a', 'aAbBcCdD1234_一二三')
print(res)  # ['a']
# $		匹配字符串结尾
res = re.findall('三$', 'aAbBcCdD1234_一二三')
print(res)  # ['三']
# a|b	匹配a或者b
res = re.findall('b|D','aAbBcCdD1234_一二三')
print(res)  # ['b', 'D']
# ()	给正则表达式分组和捕获
txt = '17112345678 18112345678 19112345678'
res = re.findall('171|181d{8}', txt)
print(res)  # ['171', '18112345678']
"""没有分组,181d{8}被看做一个整体"""
res1 = re.findall('(171|181)d{8}', txt)
print(res1)  # ['171', '181']
"""因为()的捕获优先提取,所以导致d{8}失效"""
res1 = re.findall('(?:171|181)d{8}', txt)
print(res1)  # ['17112345678', '18112345678']
"""使用?:取消捕获"""
# []	匹配字符组中的字符
# [^]	匹配除了字符组中的其他字符
res = re.findall('[^abc]','aAbBcCdD1234_一二三')
print(res)  # ['A', 'B', 'C', 'd', 'D', '1', '2', '3', '4', '_', '一', '二', '三']
符号说明
.通配符,代表除换行符以外任意字符
w匹配字母或数字或下划线
W与w相反
d匹配数字
D与d相反
^匹配开头字符
$匹配结尾字符
|管道符,表示或
()分组和捕获
[]匹配中括号中的字符
[^]匹配中括号以外的字符
正则表达式之量词
import re
"""
在正则表达式中,量词默认都是贪婪匹配
量词不能单独使用,需要跟在表达式后,只会影响到左边那一个
"""
txt = 'aaaaaaabaaa'
# *		重复0次或多次
res = re.findall('a*',txt)
print(res)  # ['aaaaaaa', '', 'aaa', '']
# +		重复1次或多次
res = re.findall('b+',txt)
print(res)  # ['aaaaaaa', 'aaa']
# ?		重复0次或1次
res = re.findall('a?',txt)
print(res)  # ['a', 'a', 'a', 'a', 'a', 'a', 'a', '', 'a', 'a', 'a', '']
# {n}	重复n次
res = re.findall('a{3}',txt)
print(res)  # ['aaa', 'aaa', 'aaa']
# {n,}	重复n次及以上
res = re.findall('a{3,}',txt)
print(res)  # ['aaaaaaa', 'aaa']
# {n,m}	重复最少n次最多m次
res = re.findall('a{3,5}',txt)
print(res)  # ['aaaaa', 'aaa']
# {,m}	重复最多m次
res = re.findall('a{,6}',txt)
print(res)  # ['aaaaaa', 'a', '', 'aaa', '']
量词说明
*重复0个或多个
+重复1个或多个
?重复0个或1个
{n}重复n次
{n,}重复n次及以上
{n,m}重复n次以上,m次一下
{,m}重复最多m次
贪婪匹配与非贪婪匹配
"""
所有的量词默认都是贪婪匹配的,既尽可能多的匹配
如果在量词的后面加上一个问号,那么就会变成非贪婪匹配,既尽可能少的匹配
"""
txt = ''
# 贪婪匹配:
res = re.findall('<.*>', txt)
print(res)  # ['']
# 非贪婪匹配:
res = re.findall('<.*?>', txt)
print(res)  # ['']
取消转移

在正则表达式中取消转义符与字母之间的特殊含义,就是在转义符前再加一个转义符,取消后一个转义符的作用
n 对应 n
\n 对应 n

在python中,可以直接在字符串前加r
可以使字符串中转义字符取消转义

import re

print(re.findall(r'n', 'n'))  # ['n']

print(re.findall(r'\n', '\n'))  # ['\n']

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019091.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号