前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python基础语法-内置函数和模块-re模块

Python基础语法-内置函数和模块-re模块

原创
作者头像
玖叁叁
发布2023-04-18 07:24:35
2510
发布2023-04-18 07:24:35
举报
文章被收录于专栏:玖叁叁

正则表达式(Regular Expression,简称 Regex)是一种用来匹配字符串的特殊语法。在 Python 中,可以通过内置的 re 模块来使用正则表达式。

常用函数

re 模块提供了很多函数来处理正则表达式,下面是一些常用的函数:

  • re.compile(pattern, flags=0):编译正则表达式,返回一个 Pattern 对象。
  • re.search(pattern, string, flags=0):在字符串中搜索匹配正则表达式的第一个位置,返回一个 Match 对象。如果没有匹配,返回 None
  • re.match(pattern, string, flags=0):尝试从字符串的起始位置匹配正则表达式,返回一个 Match 对象。如果没有匹配,返回 None
  • re.findall(pattern, string, flags=0):搜索字符串,以列表形式返回全部能匹配的子串。
  • re.finditer(pattern, string, flags=0):搜索字符串,返回一个迭代器,包含匹配正则表达式的所有子串。
  • re.sub(pattern, repl, string, count=0, flags=0):使用指定的字符串替换原字符串中与正则表达式匹配的子串。可以指定替换的次数。返回替换后的字符串。

在这些函数中,最重要的是 re.compile()re.search(),因为它们提供了最基本的正则表达式匹配功能。

正则表达式语法

正则表达式是由一些特殊字符和普通字符组成的。其中特殊字符有特殊的含义,用来匹配字符串中的一些特定模式。下面是一些常用的特殊字符:

1. 字符匹配

符号

描述

.

匹配任意一个字符,不包括换行符

[]

匹配方括号中的任意一个字符

[^]

匹配不在方括号中的任意一个字符

\d

匹配任意一个数字,等价于 [0-9]

\D

匹配任意一个非数字字符,等价于 [^0-9]

\w

匹配任意一个数字或字母,等价于 [0-9a-zA-Z]

\W

匹配任意一个非数字或非字母字符,等价于 [^0-9a-zA-Z]

\s

匹配任意一个空白字符,等价于 [\t\n\r\f\v]

\S

匹配任意一个非空白字符,等价于 [^\t\n\r\f\v]

\b

匹配单词的边界

\B

匹配非单词的边界

下面是一些例子:

代码语言:javascript
复制
import re

# 匹配数字和字母
pattern = re.compile(r'\w')
print(pattern.findall('abc123'))  # ['a', 'b', 'c', '1', '2', '3']

# 匹配空白字符
pattern = re.compile(r'\s')
print(pattern.findall('Hello\nWorld\t!'))  # ['\n', '\t']

# 匹配边界
pattern = re.compile(r'\bhello\b')
print(pattern.findall('hello, world!'))  # ['hello']
print(pattern.findall('say hello!'))  # ['hello']
print(pattern.findall('sayhello!'))  # []

2. 重复匹配

符号

描述

*

匹配前一个字符 0 次或多次

+

匹配前一个字符 1 次或多次

?

匹配前一个字符 0 次或 1 次

{m}

匹配前一个字符 m 次

{m,}

匹配前一个字符至少 m 次

{m,n}

匹配前一个字符至少 m 次,但不超过 n 次

下面是一些例子:

代码语言:javascript
复制
import re

# 匹配至少一个数字
pattern = r"\d+"
text = "Hello 1234 World 5678"
match = re.search(pattern, text)
print(match.group())  # 1234

# 匹配0到多个数字
pattern = r"\d*"
text = "Hello 1234 World 5678"
match = re.search(pattern, text)
print(match.group())  # 空字符串

# 匹配0到1个数字
pattern = r"\d?"
text = "Hello 1234 World 5678"
match = re.search(pattern, text)
print(match.group())  # 空字符串

# 匹配3个到5个数字
pattern = r"\d{3,5}"
text = "Hello 1234567 World 8910"
match = re.search(pattern, text)
print(match.group())  # 12345

在这个例子中,我们使用了以下语法:

  • + 表示匹配至少一个,即前面的元素可以出现一次或多次。
  • * 表示匹配0到多个,即前面的元素可以不出现,或者出现多次。
  • ? 表示匹配0到1个,即前面的元素可以不出现,或者出现一次。
  • {m,n} 表示匹配m到n次,即前面的元素可以出现m次、n次或m到n次。

注意,这些语法都是贪婪匹配,即会尽可能多地匹配,例如在 {3,5} 中,如果文本中有7个数字,那么会匹配前5个数字,而不是只匹配前3个数字。如果需要非贪婪匹配,可以在语法后面加上 ?,例如 {3,5}? 表示非贪婪匹配。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常用函数
  • 正则表达式语法
  • 1. 字符匹配
  • 2. 重复匹配
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档