day17总结

print('==========匹配符号=========')

from re import fullmatch,search,findall,finditer

fullmatch(正则表达式,字符串) -- 查看字符串与正则表达式是否匹配,如果不匹配返回None
正则表达式:r'正则语法'

1)表示匹配一个字符串有三个字符,分别是a,b,c

str1 = r'abc'
result = fullmatch(str1, 'abc')
print(result)

2). -- 点表示匹配任意字符

str2 = r'abc..123'
result = fullmatch(str2,'abc. 123')
print(result)

3)\w -- 匹配一个数字,字母或者下划线(只针对AscII码表来说)

一个\w只能匹配一个字符

str3 = r'\wabc'
result = fullmatch(str3, '侯abc') #中文不在ASCII码表里面
print(result)

4)\d - 匹配任意一个数字字符

str4 = r'\d\dabc'
str5 = r'\d\d...'
result = fullmatch(str4, '12abc')
result1 = fullmatch(str5, '12沙雕王')
print(result1)

5)\s - 匹配任意一个空白字符

'''
空白字符:空格符,换行符,制表符
'''

str1 = r'how\sare'
result2 = fullmatch(str1, 'how are')
print(result2)

6)\大写字母

'''
\D - 匹配除了数字字符以外的任意字符
\S - 匹配一个非空字符
'''

7)[字符集] -- 匹配字符集中出现的任意一个字符

注意:一个中括号只能匹配一个字符

a. [多个字符] - 例如:[abc] 匹配abc中任意一个字符a或b或c
b. [1-9] - 表示可匹配的字符1到9(递增表示编码值递增)
c. [\u4e00-\u9fa5] - 匹配任意一个中文字符
str1 = r'[a-zA-Z0-9]_'
result = fullmatch(str1, 'aA1_')
print(result)

8)[^字符集] - 匹配不在字符集中的任意一个字符

str6 = r'[^0-9]'
print(fullmatch(str6, 'i'))
print('===========检测符号===========')

注意:所有检测符号都不会影响字符串长度

1)\b - 检查是否是单词边界

单词边界:能够将两个单词隔开并且不会产生歧义的任意符号:空白字符,标点符号,字符串开头和字符串结尾等等
匹配规则:先去掉\b对字符串进行匹配,如果匹配成功再检查\b所在的位置是否是单词边界

str2 = r'how,are\b'
print(fullmatch(str2, 'how,are'))
str4 = r'\b[\u4e00-\u9fa5][\u4e00-\u9fa5]\b'
print(fullmatch(str4,'哈哈'))

print(search(r'\b\d\d\b', 'gj76gj 98 ')) -- #利用边界字符\b 表示取到的数字是独立的 (search表示从很长的字符串中找到符合条件的字符)

2)^ -- 表示检查^所在的位置是否是字符串开头(与search和findall用的多)

'''
注意:这儿的^是在[]外面的,也是正则字符的最前面表示规定以什么开头,就把开头符号条件的值输出
'''

str1 = r'^\d\d\d'
print(fullmatch(str1, '345'))
print(search(str1, '123hjh234'))
print(findall(str1, '333hjk232'))

3)- 检查所在的位置是否是字符串结尾

控制次数的符号:字符符号(符号表示要字符出现的次数)

1.* -- 匹配0次或多次

'''
123a* -- 表示123后面的a出现0次或多次
123\d* -- 表示123后面出现0个或者多个任意数字字符
123[mnxy91]* -- 表示可匹配123,123mm,123nn,123mnxx,123mmnxxyy
print(fullmatch(r'123[mnxy91]*', '123mmnnxxyy9911'))
'''

str3 = r'1[2-8]\d*'
print(fullmatch(str3, '13765577103'))

2.+ -- 匹配一次或多次(在谁后面添加+谁可重复1次或多次)

'''
123a+ -- 123a,123aa,123aaa,.....
'''

3.? -- 匹配0次或1次(加在谁后面谁可匹配0或多次)

'''
-?123 - 只有123/-123可以匹配
'''

4. {}(放在谁后面匹配谁几次)

'''
1){N} - 匹配N次
a{3} - 匹配3个a
\d{3} -- 匹配3个任意数字
2){M,N} -- 匹配M到N次(匹配至少M次,最多N次)
'''

匹配电话号码
str5 = r'1[3,9]\d{9}'
匹配密码:要求6-12位的字母或者数字
str3 = r'[a-zA-Z0-9]{6,12}'
print(fullmatch(str3, '36gh28'))

贪婪和非贪婪

在匹配次数不确定的时候,会出现贪婪和非贪婪(默认情况都是贪婪的)
'''
什么是贪婪:在能够'匹配成功'的前提下,匹配次数尽可能多
非贪婪:在能够匹配成功的前提下,匹配次数尽可能少
'''

贪婪:
str1 = r'a.+b'
print(search(str1,'hjkha==2-32'))
print(search(r'a\d{3,5}', 'hjha34b456b6')) -- 由于贪婪所以取最多a34b456b
非贪婪
str1 = r'a.+?b'
print(search(str1,'hjkha==2-32'))
print(search(r'a\d{3,5}', 'hjha34b456b6')) -- 非贪婪取的是a34b
print('====================分之================')

1. |

'''
正则1|正则2 -- 先让正则1去匹配,如果匹配成功就成功匹配失败在让正则2去
(正则1和正则2 中只要有一个匹配成功即可)
'''

str2 = r'\d{2,5}|[A-Z0-9]abc'
print(fullmatch(str2, '234'))
print('============分组=============')

1.() -- 将括号里面的内容作为一个整体

'''

1)整体操作

r'(\d\d|[A-Z]{2})abc' - 匹配一个字符串后面是abc,前面是两个数字或者大写字母
r'([a-z]\d){3}' -- a8j1k9

2)分组

a.分组截取: 方便分段分情况取不同的匹配结果
str11 = r'(\d{3})[a-z]{3}'
print(findall(str11, '382dg234hljkl123hjk'))
b.分组重复:在正则中分组的后面用\X来重复前面的分组(x是数字几就重复几次)

'''

strr1 = r'(\d{3})[a-z]{3}\1'
print(fullmatch(strr1, '123bbb123'))
print('===========转义字符============')

1. 加\

'''
在正则中有特殊功能和特殊意义的符合前面加入 \ 让这个符合的特殊功能和意义消失
'''

2.加[]

'''
在[]中有特殊意义的符号:^ 放在最开头,- 在两个字符之间
其他字符包括:.+?*$,这个单独的符号在[]中都表示这个符号本身
'''

print('========re模块========')

import re
re模块是python提供的专门针对正则表达式应用的相关函数

1.compile(正则表达式) - 将正则表达式转换成正则对象

2.fullmatch(正则表达式,字符串) - 将正则表达式与字符串完全匹配

match(正则表达式,字符串) -- 只匹配字符串开头
注意:以上二者匹配成功返回匹配对象,匹配失败返回None

1)匹配对象

a.获取匹配到的字符串

'''
匹配对象.group() -- 获取整个正则表达式匹配到的字符串,结果的字符串
匹配对象.group(N) -- 获取整个正则表达式中第N个分组匹配到的字符串
'''

result = fullmatch(r'(\d{3})=([a-z]{3})','234=ana')
print(result.group())
print(result.group(1))
b.获取匹配到的字符串在原字符串中的位置信息

'''
匹配对象.span() -- 返回 匹配结果在原字符串中的下标范围:[开始下标,结束下标]
匹配对象.span() -- 返回第N个分组匹配到的结果在原字符串中的范围
'''

c.获取原字符串

'''
匹配对象.string
'''

3.查找

'''

1)search(正则表达式,字符串) -- 在正则表达式中查到第一个满足正则表达式的子串,找到了结果就是匹配对象,否则就是None

2)findall(正则表达式,字符串) -- 获取字符串中所有满足正则表达式的子串,返回值是一个列表

注意:如果正则表达式中有分组,列表中的匹配结果只会取分组匹配到的内容

3)finditer(正则表达式,字符串) -- 获取字符串中所有满足正则表达式的子串,返回值是一个迭代器,元素是匹配对象

'''

result = search(r'(\d{3})([a-z]{3})','gjkj123hjk43kj546hkhk121hjj')
print(result.group())
result = finditer(r'(\d{3})([a-z]{3})','gjkj123hjk43kj546hkhk121hjj')
print(result)
list1 = []
list2 = []
list3 = []
for x in result:
    list1.append(x.group())
    list2.append(x.group(1))
    list3.append(x.group(2))
print(list1)
print(list2)
print(list3)
result = search(r'^\d{3}', '123jgk456')
print(result)

4.切割

'''
split(正则表达式,字符串) -- 将字符串中满足正则表达式的子串作为切割点对字符串进行切割,返回一个字符串列表
'''

5.替换

'''
sub(正则表达式,字符串1,字符串2) -- 将字符串2 中所有满足正则表达式的子串都替换成字符串1,返回一个字符串
'''

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 正则表达式 from re import fullmatch, search, findall 1.什么是正则表达...
    oct___越来越2阅读 209评论 0 0
  • 01.正则基本符号 1.什么是正则表达式 正则表达式就是字符匹配的工具;是由正则符号和普通字符组成,来匹配不同规律...
    Gary134阅读 525评论 0 0
  • from re import fullmatch,search,findall 1.什么是正则表达式 正则表达式是...
    举颗凤梨阅读 210评论 1 2
  • 正则表达式 一、什么是正则表达式 正则表达式是处理字符串的工具,通过不同的正则符号来描述字符串的规则 二、正则符号...
    ______n___阅读 238评论 0 0
  • 1. 什么是正则表达式 正则表达式是处理字符串的工具, 通过不同的正则符号来描述字符串的规则 1.1 full...
    酒煮灬核弹头阅读 97评论 0 0