全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 20 道配套习题

正则表达式专题

专题说明

正则表达式是文本处理的利器。本专题从元字符和量词的基础出发,深入讲解分组与捕获、零宽断言、re模块的API使用、正则性能优化以及常见实战场景,帮助学习者全面掌握正则表达式的编写和运用。

学习目标

  1. 掌握正则表达式的基本语法和元字符
  2. 理解分组、捕获和反向引用机制
  3. 熟练使用零宽断言(先行和后行断言)
  4. 掌握re模块的search、match、findall、sub等方法
  5. 了解正则性能优化和常见陷阱

学习内容

本专题涵盖以下核心知识点:

元字符与量词

  • 常见元字符:. ^ $ * + ? { } [ ] | ( )
  • 字符类:\d \w \s \D \W \S
  • 量词:贪婪与惰性匹配
  • 转义字符:. * + 等

分组与捕获

  • 普通分组 ()
  • 非捕获分组 (?:)
  • 命名分组 (?P)
  • 反向引用 \1 \2
  • 分组在sub中的应用

零宽断言

  • 正向先行断言 (?=)
  • 负向先行断言 (?!)
  • 正向后行断言 (?<=)
  • 负向后行断言 (?<!)

re模块API

  • match、search、findall、finditer
  • sub、subn、split
  • compile预编译
  • 修饰符:re.IGNORECASE、re.MULTILINE、re.DOTALL

实战场景

  • 邮箱、手机号、URL验证
  • 日志解析
  • HTML标签匹配
  • 文本提取与替换

学习建议

  1. 先掌握基本语法,再学习高级特性
  2. 使用在线正则工具测试和调试表达式
  3. 注意贪婪和惰性匹配的区别
  4. 复杂场景考虑使用命名分组提高可读性

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
判断题

Python的re模块提供了正则表达式匹配功能,match()从字符串开头匹配,search()在字符串中搜索匹配,findall()返回所有匹配结果。

A

B

2
单选题

对字符串'Python is great',执行re.match('is', ...)的结果是:

A

返回Match对象,匹配'is'

B

返回Match对象,匹配'is'(位置7)

C

返回None

D

报错

3
填空题

re.______()从字符串______匹配,不匹配返回______。re.______()在字符串________搜索第一个匹配。re._______()返回______匹配结果的______。Match对象的______()方法返回匹配内容。

4
判断题

正则表达式中\d匹配数字,\w匹配字母数字下划线,.匹配任意字符(除换行),*匹配0次或多次,+匹配1次或多次。

A

B

5
单选题

正则表达式a+匹配的是:

A

字符'a'出现0次或多次

B

字符'a'出现1次或多次

C

字符'a'出现恰好1次

D

字符'a'出现恰好n次

6
填空题

\d匹配______\w匹配______________\s匹配______字符。.匹配______字符(除换行)。*匹配_________+匹配_________?匹配________[]定义______^表示____________

7
判断题

re.compile()可以预先编译正则表达式,返回Pattern对象,多次使用同一模式时编译可以提高性能。

A

B

8
单选题

编译后的Pattern对象可以直接使用以下哪些方法?

A

match、search、findall

B

只有match和search

C

只有findall

D

需要通过re模块调用

9
填空题

re._______()预编译正则表达式,返回_______对象。编译后的Pattern可以直接调用_________________________等方法。编译可以提高______,避免重复______模式。编译时可以指定______参数。

10
判断题

re.IGNORECASE标志使匹配忽略大小写,re.MULTILINE使^和$匹配每行的开头和结尾,re.DOTALL使.匹配包括换行符在内的所有字符。

A

B

11
单选题

执行re.findall(r'hello', 'Hello World hello', re.IGNORECASE)的结果是:

A

['hello']

B

['Hello', 'hello']

C

['Hello', 'hello', 'Hello']

D

[]

12
填空题

re.__________(或re.I)使匹配__________。re._________(或re.M)使^和$匹配______的开头结尾。re.______(或re.S)使.匹配________在内的所有字符。多个标志用______符号组合。

13
判断题

正则表达式中的分组使用括号()定义,可以通过group()方法获取分组内容,group(0)返回整个匹配,group(1)返回第一个分组。

A

B

14
单选题

执行以下代码后,groups()返回什么?

Python
m = re.search(r'(\w+)@(\w+)\.(\w+)', 'test@example.com')
A

('test@example.com',)

B

('test', 'example', 'com')

C

['test@example.com']

D

('test', 'example.com')

15
填空题

分组用______()定义,group______返回整个匹配,group______返回第一个分组。______()返回所有分组组成的______。命名分组用(?P<______>pattern)语法,通过group('______')获取。反向引用用______(数字)或(?P=name)。

16
判断题

贪婪量词(、+、{n,})尽可能匹配更多字符,非贪婪量词(?、+?、{n,}?)尽可能匹配更少字符,在量词后加?即可转为非贪婪模式。

A

B

17
单选题

执行re.findall(r'<div.*?</div>', '<div>a</div><div>b</div>')的结果是:

A

['ab']

B

['a', 'b']

C

['a', 'b']

D

['', '', '', '']

18
填空题

贪婪量词________匹配字符,如.*匹配到最后。非贪婪量词在量词后加______,如______________匹配字符。非贪婪适合提取______的匹配,如HTML______。贪婪适合匹配______的连续内容。

19
判断题

re.sub(pattern, replacement, string)用于字符串替换,将匹配的内容替换为指定字符串,返回替换后的新字符串。

A

B

20
单选题

执行re.sub(r'\d+', 'NUM', 'a1b23c456')的结果是:

A

'aNUMbNUMcNUM'

B

'aNUMbNUMNUMcNUMNUMNUM'

C

'NUMNUMNUM'

D

'a1b23c456'

← 上一个专题 模块与包专题
下一个专题 → 流程控制专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库