42 python中正则中的分组 正则中匹配字符串的起始和结尾以及单词边界

第七课 正则中的分组
# 分组
# 正则表达式中用一对圆括号括起来的部分被称为一个分组
# ‘(\d\d\d)-(\d\d)‘

import re

‘‘‘
1. 只有圆括号括起来的部分才算一组,如果正则表达式中既有被圆括号括起来的部分,
也有未被圆括号括起来的部分,那么只将圆括号括起来的部分算一组
2. group方法,如果不指定参数,会返回匹配的整个字符串,如果加参数,会返回指定
分组的字符串,组索引从1开始
3. groups方法,以元组形式返回匹配的所有分组
4. 分组的索引是从1开始的
‘‘‘
# 分3组 3个数字-4个数字-2个小写字母
m = re.match(‘(\d{3})-\d{4}-[a-z]{2}‘,‘123-4567-xy‘)
print(m) # <re.Match object; span=(0, 11), match=‘123-4567-xy‘>
print(m.groups()) # (‘123‘,)
print(m.group()) # 123-4567-xy
print(m.group(1)) # 123
print(‘-------------‘)
m = re.match(‘(\d{3})-(\d{4})-[a-z]{2}‘,‘123-4567-xy‘)
print(m) # <re.Match object; span=(0, 11), match=‘123-4567-xy‘>
print(m.groups()) # (‘123‘, ‘4567‘) 这个是返回一个元组 只要是分组里面的就放在元组里
print(m.group()) # 123-4567-xy
print(m.group(1)) # 123
print(m.group(2)) # 456
print(‘----------‘)
m = re.match(‘(\d{3})-(\d{4})-([a-z]{2})‘,‘123-4567-xy‘)
print(m) # <re.Match object; span=(0, 11), match=‘123-4567-xy‘>
print(m.groups()) # (‘123‘, ‘4567‘, ‘xy‘)
print(m.group()) # 123-4567-xy
print(m.group(1)) # 123
print(m.group(2)) # 456
print(m.group(3)) # xy
print(‘-----------‘)
m = re.match(‘(\d{3}-\d{4})-([a-z]{2})‘,‘123-4567-xy‘)
print(m) # <re.Match object; span=(0, 11), match=‘123-4567-xy‘>
print(m.groups()) # (‘123-4567‘, ‘xy‘)
print(m.group()) # 123-4567-xy
print(m.group(1)) # 123-4567
print(m.group(2)) # xy

第八课 正则中匹配字符串的起始和结尾以及单词边界

# 匹配字符串的起始和结尾以及单词边界
‘‘‘
"^":匹配字符串的开始
"$":匹配字符串的结束
"\b":匹配单词边界

单词边界:是指空格或标点符号
" hello?"  这个左右2侧都有边界
" world0"  这个表示左侧有边界,右侧没有边界
‘‘‘
import re
# "The"必须在字符串的开始才会搜索到
m = re.search(‘The‘, ‘abc The.‘)
print(m)     # <re.Match object; span=(4, 7), match=‘The‘>
m = re.search(‘^The‘, ‘The bus.‘)
print(m)     # <re.Match object; span=(0, 3), match=‘The‘>

# The必须在字符串的结尾才会搜索到
m = re.search(‘The$‘,‘The end.‘)
print(m)     # None
m = re.search(‘The$‘,‘end.The‘)
print(m)     # <re.Match object; span=(4, 7), match=‘The‘>

print("---------------")
# 要求‘this‘左侧必须有边界才能搜索到
m = re.search(r‘\bthis‘,"What‘s this?")    # 不使用r里面的\b就会给你转义了
print(m)     # <re.Match object; span=(7, 11), match=‘this‘>

m = re.search(r‘\bthis‘,"this is a bus.")
print(m)      # <re.Match object; span=(0, 4), match=‘this‘>

m = re.search(r‘\bthis‘,"<this> is a bus.")
print(m)      # <re.Match object; span=(1, 5), match=‘this‘>

m = re.search(r‘\bthis‘,"1234this is a bus.")
print(m)     # None

m = re.search(r‘\bthis\b‘,"What‘s this123")
print(m)    # None
第九课 正则中使用findall和finditer函数查找所有匹配的结果
# 使用findall和finditer函数查找所有匹配正则表达式的字符串

‘‘‘
findall:通过列表返回所有满足条件的字符串,DOM    这是所有结果一起返回
finditer:将搜索结果通过一个迭代器返回,SAX      这个不是所有的返回
‘‘‘

import re
s = ‘12-a-abc54-a-xyz---78-A-ytr‘
result = re.findall(r‘\d\d-[a]-[a-z]{3}‘,s)
print(result)                                   # [‘12-a-abc‘, ‘54-a-xyz‘]
result = re.findall(r‘\d\d-[aA]-[a-z]{3}‘,s)   # 这一步里面的 [aA] 也是忽略大小写
print(result)                               # [‘12-a-abc‘, ‘54-a-xyz‘, ‘78-A-ytr‘] 

result = re.findall(r‘(\d\d-[aA])-([a-z]{3})‘,s)   # 分组返回 拆成一个组
print(result)                               # [(‘12-a‘, ‘abc‘), (‘54-a‘, ‘xyz‘), (‘78-A‘, ‘ytr‘)]
s1 = ‘12-a-abc54-a-xYz---78-A-ytr‘
result = re.findall(r‘\d\d-a-[a-z]{3}‘,s1,re.I)   # 可以加第三个参数 第三个参数的位置 可以忽略大小写 re.I 这个就是忽略大小写
print(result)                               # [‘12-a-abc‘, ‘54-a-xYz‘, ‘78-A-ytr‘]

it = re.finditer(r‘(\d\d)-a-([a-z]{3})‘,s,re.I)
for result in it:
    print(result.group(),end=‘ <‘)
    groups = result.groups()
    for i in groups:
        print(i, end = ‘ ‘)
    print(‘>‘)

‘‘‘
12-a-abc <12 abc >
54-a-xyz <54 xyz >
78-A-ytr <78 ytr >

‘‘‘

原文地址:https://blog.51cto.com/12445535/2465944

时间: 2024-11-04 03:00:03

42 python中正则中的分组 正则中匹配字符串的起始和结尾以及单词边界的相关文章

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

欢迎加入Python学习交流群:535993938  禁止闲聊 ! 名额有限 ! 非喜勿进 ! 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于

【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于它是一个框架,任何人都可

sed 使用扩展正则式的分组功能进行替换

以下命令使用sed的扩展正则式的分组功能进行替换,-r参数启用扩展正则式支持 sed -r -i 's/(PASS_MAX_DAYS)\s+([0-9]+)/\1 90/' /etc/login.defs 这条命令将/etc/login.defs文件的行 PASS_MAX_DAYS 99999 替换为 PASS_MAX_DAYS 90 以下正则式支持分组功能,()表示一个分组 (PASS_MAX_DAYS)\s+([0-9]+) 将PASS_MAX_DAYS放在分组1中,[0-9]+匹配任意多个

40 python 正则表达式 match方法匹配字符串 使用search函数在一个字符串中查找子字

第一课: 使用match方法匹配字符串 # 正则表达式:使用match方法匹配字符串 ''' 正则表达式:是用来处理文本的,将一组类似的字符串进行抽象,形成的文本模式字符串 windows dir *.txt file1.txt file2.txt abc.txt test.doc a-file1.txt-b linux/mac ls 主要是学会正则表达式的5方面的方法 1. match:检测字符串是否匹配正则表达式 2. search:在一个长的字符串中搜索匹配正则表达式的子字符串 3. fi

C#-MVC开发微信应用(7)--在管理系统中同步微信用户分组信息

在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码.希望从一个更高的层次介绍微信的开发. 在<C#-MVC开发微信应用(6)--用户分组信息管理>具体介绍了微信用户分组接口的实现方法,本篇将介绍,如何在我的平台软件上进行管理我们微信上的用户分组. 其实微信能够风风火火的原因,主要就是因为有用户信息,所以同步并管理好微信账号的关注用户数据是非常重要的.有了微信用户的数据,你可以和你任何应用

Python爬虫(图片)编写过程中遇到的问题

最近我突然对网络爬虫开窍了,真正做起来的时候发现并不算太难,都怪我以前有点懒,不过近两年编写了一些程序,手感积累了一些肯定也是因素,总之,还是惭愧了.好了,说正题,我把这两天做爬虫的过程中遇到的问题总结一下: 需求:做一个爬虫,爬取一个网站上所有的图片(只爬大图,小图标就略过) 思路:1.获取网站入口,这个入口网页上有很多图片集合入口,进入这些图片集合就能看到图片链接了,所以爬取的深度为2,比较简单:2.各个子图片集合内所包含的图片链接有两种形式:一种是绝对图片路径(直接下载即可),另一种的相对

python生成器、装饰器、正则

包子来了[4],被[mayun]吃了! 包子来了[4],被[mahuateng]吃了! 做了两个包子 包子来了[5],被[mayun]吃了! 包子来了[5],被[mahuateng]吃了! 做了两个包子 包子来了[6],被[mayun]吃了! 包子来了[6],被[mahuateng]吃了! 做了两个包子 包子来了[7],被[mayun]吃了! 包子来了[7],被[mahuateng]吃了! 做了两个包子 包子来了[8],被[mayun]吃了! 包子来了[8],被[mahuateng]吃了! 做了

《Entity Framework 6 Recipes》中文翻译系列 (17) -----第三章 查询之翻页、过滤和使用DateTime中的日期部分分组

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-12 翻页和过滤 问题 你想使用分页和过滤来创建查询. 解决方案 假设你有如图3-13所示的模型,模型中有一个Custormer实体类型. 图3-13 包含一个Customer实体类型的模型 你有一个基于过滤条件来显示客户信息的应用.你的公司有许多客户(也许数百万!),为了保证尽可能响应的用户体验,你想在每一页上只显示一定数量的客户.创建一个查询,它能过虑客户并按页返回可控数量的结果集.

python学习笔记(24)正则

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 原链:http://www.cnblogs.com/vamei/archive/2012/08/31/2661870.html 笔记:一半的笔记,半吊子水平 #第25讲 re正则 #语法: #re.match(pattern, string, flags=0) #两个参数,pattern 匹配的正则表达式 str 需要正则匹配字符串 flag 大小写多行匹配 import re