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

正则表达式

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

正则表达式

正则表达式

正则表达式属一种让一些复杂字符串问题变得简单的工具(正则不是pyth中特有的,所有高
级编程语言都支持的,正则的语法同用)
不管通过正则表达式解决生么问题,写正则表达式的时候都是在使用正则表达式描述字符串规则

示例:判断指定的字符串是否是一个合法的的手机号
 def is_tel2(num,str):
     from  re import fullmatch
     return bool(fullmatch(r'1[3-9]d{9}',num))
 python的re模块

re 模块是python中用来支持正则表达式的一个模块,模块中包含了所有和正则相关的函数
fullmatch(正则表达式,字符串):判断正则表达式和指定的字符串是否完全匹配(判断整个字符串是否
符合正则表达式所描述的规则,如果匹配成功返回匹配对象,匹配失败就返回None)

from re import fullmatch#功能导入
正则表达式语法 匹配类符号
# 1,普通符号    在正则表达式中表示符号本身的符号
result = fullmatch(r'abc','abc')
print(result)
# 2,  .  :匹配任意一个字符    .. 匹配任意两个字符
result = fullmatch(r'a.c','abc')
print(result)
# 3 d :表示匹配任意一个数字字符
result = fullmatch(r'adc','a0c')
print(result)
# 4 s :表示匹配任意一个空白字符
# 空白字符:能产生空白效果的字符,例如:空格,换行,水平制表符
result = fullmatch(r'asc','atc')
print(result)
result = fullmatch(r'ddsac','56 ac')
print(result)
# D  :匹配任意一个非数字字符
result = fullmatch(r'aDc','a$c')
print(result)
# S  匹配任意一个非空白字符
result = fullmatch(r'aSSSc','a?#$c')
print(result)
#  [字符集]:匹配字符集中任意一个字符

[a-zA-Zd_]匹配字母数字或者下划线
[u4e00-u9fa5]:匹配任意一个中文字符
注意:在[]中减号放在两个字符中间表示谁到谁之间(确定的方式是根据字符编码值大小确定的);如果
减号不在两个字符中间,就表示普通的一个减号

result = fullmatch(r'a[bcxd]l','axl')
print(result)
result = fullmatch(r'a[u4e00-u9fa5]d','a你d')
print(result)
[^字符集]:匹配不在字符集中额任意一个字符
result = fullmatch(r'a[^qwer]c','adc')
print(result)
result = fullmatch(r'a[^qwer]c','aqc')
print(result)
匹配次数
from re import fullmatch#导入功能
#  * :0次或者多次(任意次数)*在谁的后面控制谁的次数
"""
d*:0个数字或者多个数字
[字符集]*
"""
result = fullmatch(r'a*123','123')
print(result)
result = fullmatch(r'a*123','aa123')
print(result)
result = fullmatch(r'd*abc','123abc')
print(result)
result = fullmatch(r'd*abc','abc')
print(result)
# + :1次或多少次
result = fullmatch(r'a+123','a123')
print(result)
result = fullmatch(r'a+123','aaaa123')
print(result)
# ? :0次或者1次
result = fullmatch(r'a?123','123')
print(result)
result = fullmatch(r'a?123','a123')
# {}
"""
{M,N}:M到N次
{M,}:最少M次
{,N}:最多N次
{N}:N次
"""
result = fullmatch(r'a{1,3}123','a123')
print(result)
result = fullmatch(r'a{1,3}123','aaa123')
print(result)
result = fullmatch(r'a{3,5}123','aaa123')
print(result)
result = fullmatch(r'a{5,}123','aaaaaa123')
result = fullmatch(r'a{,3}123','aa123')
print(result)
result = fullmatch(r'a{3}123','aaa123')
print(result)
练习写一个正则,判断输入的内容是否是合法qq(长:5到12位,第一位不能是0)
# from re import fullmatch
# qq = '2217452845'
# result = fullmatch(r'[1-9]d{4,11}',qq)
# if result:
#     print('合法')
# else:
#     print('不合法')
练习二# 练习:判断输入的内容是否是一个合法的标识符(由字母、数字下划线组成,数字不能开头)
# from re import fullmatch
# str1 = ''
# result = fullmatch(r'[a-zA-Z_]/d')
# print(result)
贪婪和非贪婪
"""
当匹配次数不确定的时候(*,+,?,{m,n},{m,},{,n})匹配模式分为贪婪和非贪婪两种,默认是
贪婪的
贪婪:在匹配成功的时候有多种匹配结果,贪婪取最多次数对应的匹配结果(匹配次数不确定的地方,有多
种匹配方式可以匹配成功,贪婪取最多次数)
非贪婪取最少
非贪婪模式:*?,+,??,{m,n}?,{m,}?,{,n}?
注意:如果匹配结果只有一种可能,那么贪婪和非贪婪的结果都一样
"""
from re import match#引入
# match(正则表达式,字符串):判断字符串开头是否符合正则表达式描述的规则
result = match(r'a.+b','a你好111111b')
print(result)
result = match(r'a.+?b','a你好111111b')
print(result)

result = match(r'a.+b','a1b')
print(result)
分组和分支
# 分组  ()
"""
将正则表达式中的一部分作为一个整体进行相关操作
重复   可以在正则表达式中通过m来重复他前面第m个分组的匹配结果
m 只能重复在之前出现的内容,,无法重复在他之后出现的内容
捕获:分为手动捕获和自动捕获,只获取正则表达式中的一部分匹配到的结果
自动捕获:在正则表达式如果有括号就会只捕获括号里的内容
"""
from re import fullmatch
result = fullmatch(r'(dd[A-Z]{2})+','12AS45FG')
print(result)
result = fullmatch(r'(d{2})[a-z]1','98k98')
print(result)
# result= fullmatch(r'(d[a-z])1=2(.123)','1a1ab123b123')会报错

from re import fullmatch, findall#引入自动捕获功能
name = '小明工资8000元,房租1500元,年龄28,'
result = findall(r'(d+)元',name)
print(result)
# 分支 :
# 正则1|正则2|正则3.。。。。匹配可以和多个正则中任意一个正则匹配的字符串
# 注意:如果想要正则表达式中的一部分实现多一的效果,变化的部分用分组表示
result = fullmatch(r'd{3}|[a-z]{2}','mk')
print(result)
result = fullmatch(r'ad{3}|a[a-z]{3}','a111')
print(result)
result = fullmatch(r'a(d{3}|[a-z]{3})b','a111b')
print(result)
转义符号:

就是在本身具备特殊功能或者特殊意义的符号前加‘’,让这个符号变成一个普通的符号

匹配任意一个小数的字符串
from re import fullmatch
result=fullmatch(r'd+.d+','1.2')
print(result)
匹配任意一个正整数字符串
result = fullmatch(r'+d+','+3568')
print(result)
result = fullmatch(r'(d+)','(123456789)')
print(result)
[]里面的转义符号:单独存在有特殊意义的符号(+,?,*。。。等),在【】特殊意义会消失
result = fullmatch(r'd+[.+?*]d+','1.23')
print(result)
本身在括号中有特殊功能的符号,如果要表示普通符号必须加‘’
result = fullmatch(r'a[^1-2]b','a-b')
print(result)
j检查类符号:

检测类符号是在匹配成功的情况下,检测检测类符号所在的位置是否符号相关要求

b:检测是否是单词边界 单词边界:可以将两个单词区分开的符号都是单词边界,比如:空白符号,英文标点符号, 字符串开头和字符串结尾
from re import findall
result = fullmatch(r'abcbsmn','abc mn')
print(result)
B:检测是否不是单词边界
#^:检查是否是字符串kait
result = findall(r'^d+','123456')
print(result)
result = findall(f'^.+{5}','123456789')
print(result)
$:检测是否字符串结尾 re模块常用函数
from re import *#功能引导
fullmatch(正则表达式,字符串):完全匹配,判断整个字符串是否符合正则表达式描述的规则,匹配成功返回匹配对象,匹配失败返回空 match(正则表达式,字符串):匹配字符串开头,判断字符串开头是否符合正则表达式描述的规则,匹配成功返回匹配对象,匹配失败返回空 search(正则表达式,字符串):获取字符串中第一个能够和正则匹配的子串,能找到返回匹配对象,找不到返回空 findall(正则表达式,字符串):获取字符串中所有满足正则的子串,返回一个列表,列表中的元素是字符串。 # 注意:如果正则表达式中有分组,会针对分组做自动捕获(只获取分组匹配到的结果) finditer(正则表达式,zfc):获取字符串中所有满足正则的子串,返回一个迭代器,迭代器中的元素是每个子串对应的匹配对象 split(正则表达式,zfc):将字符串中所有满足正则的子串作为切割点对字符串进行切割 sub(正则表达式,字符串1,字符串2):将字符串2中所有满足正则的字串都替换成字符串1 匹配对象 直接获取整个正则表达式对应的匹配结果: 匹配对象.group() 手动获取某个分组对应的匹配结果:匹配对象.group(分组数) 获取匹配结果在原字符串中的位置:匹配对象.span() 参数 忽略大小写:(?i) 单行匹配:(?s) 多行匹配:匹配的时候.(点)不能和换行(n)进行匹配,单行匹配就可以
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1038392.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

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