529|3

337

帖子

2

TA的资源

纯净的硅(初级)

楼主
 

《Python编程快速上手 让繁琐工作自动化 第2版》第7章模式匹配与正则表达式 [复制链接]

本帖最后由 我爱下载 于 2024-5-10 09:38 编辑
Python编程快速上手 让繁琐工作自动化 2版》7 模式匹配与正则表达式
本章篇幅较大,作者细致阐述了通过正则表达式进行字符串中匹配搜索的方法和技巧,对于Regex的使用有很大的帮助。
习题
  1. 创建Regex对象的函数是什么?
    答:
    通过re.compile()创建Regex对象。
  2. 在创建Regex对象时,为什么常用原始字符串?
    答:
    原始字符串可以简化正则表达式中转义字符的使用。
  3. search()方法返回什么?
    答:
    search()方法返回一个Match对象。
  4. 通过Match对象如何得到匹配该模式的实际字符串?
    答:
    Match对象中有一个group()方法,它返回被查找字符串中实际匹配的文本
  5. 在用r'(\d\d\d)-(\d\d\d-\d\d\d\d)'创建的正则表达式中,分组0表示什么?分组1表示什么?分组2表示什么?
    答:
    分组0返回整个匹配的文本,分组1返回第一个括号匹配的文本,分组2返回第2个括号匹配的文本。
  6. 括号和句点在正则表达式语法中有特殊的含义。如何指定正则表达式匹配真正的括号和句点字符?
    答:
    在正则表达式中,括号表示分组。句点为通配字符,他匹配除换行符之外的所有字符。为了匹配真正的括号和句点需要使用倒斜杠转义,\( \) \.
  7. findall()方法返回一个字符串的列表或字符串的元组的列表。是什么决定它提供哪种返回?
    答:
    如果正则表达式中没有分组,findall()方法返回字符串列表,如果正则表达式中存在,findall()方法返回字符串元组的列表。
  8. 在正则表达式中,|字符表示什么意思?
    答:
    正则表达式中,“|” 符号称为“管道”,可以完成匹配许多表达式中的一个。
  9. 在正则表达式中,?字符有哪两种含义?
    答:
    在正则表达式中,?字符声明非贪心匹配或表示可选的分组。
  10. 在正则表达式中,+和*字符之间的区别是什么?
    答:
    在正则表达式中,*意味着“匹配零次或多次”,+(加号)则意味着“匹配一次或多次”。
  11. 在正则表达式中,{3}和{3,5}之间的区别是什么?
    答:
    在正则表达式中,{3}表示匹配3次,{3,5}表示匹配3次、4次和5次之间的任何一种 。
  12. 在正则表达式中,\d、\w和\s缩写字符类是什么意思?
    答:
    在正则表达式中,\d表示0~9的任何数字;\w表示任何字母、数字或下划线字符(可以认为是匹配“单词”字符);\s表示空格、制表符或换行符(可以认为是匹配“空白”字符)。
  13. 在正则表达式中,\D、\W和\S缩写字符类是什么意思?
    答:
    在正则表达式中,\D表示除0~9的数字以外的任何字符;\W表示除字母、数字和下划线以外的任何字符;\S表示除空格、制表符和换行符以外的任何字符。
    14..*和*?之间的区别是什么?
    答:
    .*表示任意文本;*?表示非贪心模式匹配0次或多次。
  14. 匹配所有数字和小写字母的字符分类语法是什么?
    答:
    [0-9a-z]
  15. 如何让正则表达式不区分大小写?
    答:
    可以向re.compile()传入re.IGNORECASE或re.I作为第二个参数。
  16. 字符.通常匹配什么?如果re.DOTALL作为第二个参数传递给re.compile(),它会匹配什么?
    答:
    “.”字符匹配除换行符外的所有字符,如果re.DOTALL作为第二个参数传递给re.comple(),将会匹配所有字符包括换行符。
  17. 如果numRegex = re.compile(r'\d+'),那么numRegex.sub('X', '12, drummers, 11 pipers, five rings, 3 hens')返回什么?
    答:
    返回字符串“X,drummers,X pipers,five rings,X hens”
  18. 将re.VERBOSE作为第二个参数传递给re.compile(),让你能做什么?
答:
当匹配复杂的文本模式,可能需要长的、令人费解的正则表达式。将re.VERBOSE作为第二个参数传递给re.compile(),忽略正则表达式字符串中的空白符和注释,从而缓解这一点
20.写一个正则表达式匹配每3位就有一个逗号的数字。它必须匹配以下数字:
  • '42'
  • '1,234'
  • '6,368,745'
但不会匹配以下数字:
  • '12,34,567'(逗号之间只有两位数字)
  • '1234'(缺少逗号)
答:
re.compile(r'''
(?<![\d|,])\d{1,3}(?=\s) #匹配只有1-3位数,左边
|
(?<![\d|,])\d{1,3}(?:,\d{3})+(?=\s) #匹配带有","的情况
''', re.VERBOSE)
21.写一个正则表达式匹配姓为Nakamoto的完整姓名。你可以假定名字总是出现在
姓前面,是一个大写字母开头的单词。该正则表达式必须匹配:
  • 'Satoshi Nakamoto'
  • 'Alice Nakamoto'
  • 'RoboCop Nakamoto'
但不匹配:
  • 'satoshi Nakamoto'(名字没有首字母大写)
  • 'Mr. Nakamoto'(前面的单词包含非字母字符)
  • 'Nakamoto'(没有名字)
  • 'Satoshi nakamoto'(姓没有首字母大写)
答:
re.compile(r'[A-Z][a-zA-Z]*\sNakamoto')
22.编写一个正则表达式来匹配一个句子,它的第一个词是Alice、Bob或Carol,第
二个词是eats、pets或throws,第三个词是apples、cats或baseballs。该句子以句点结束。这个正则表达式不区分大小写。它必须匹配:
  • 'Alice eats apples.'
  • 'Bob pets cats.'
  • 'Carol throws baseballs.'
  • 'Alice throws Apples.'
  • 'BOB EATS CATS.'
但不匹配:
  • 'RoboCop eats apples.'
  • 'ALICE THROWS FOOTBALLS.'
  • 'Carol eats 7 cats.'
答:
     re.compile(r'''((?:Alice|Bob|Carol)\s(?:eats|pets|throws)\s(?:apples|cats|baseballs)\.)''', re.VERBOSE | re.I)

最新回复

正则表达式一下就上难度了,细节地方比前面多太多了    详情 回复 发表于 2024-5-10 12:04
点赞 关注
 
 

回复
举报

92

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

太详细了,牛

 
 
 

回复

6450

帖子

9

TA的资源

版主

板凳
 

正则表达式一下就上难度了,细节地方比前面多太多了 

个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

337

帖子

2

TA的资源

纯净的硅(初级)

4
 

应用正则表达式的机会挺少的,通过读书发现正则表达式功能强大,但是也确实非常复杂,如果有一个设计工具就好了

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表