Python正则表达式的入门用法(上)

Python正则表达式是使用re模块来进行操作的。re模块提供了一组函数,用于进行字符串的匹配和查找操作。

下面是Python中使用正则表达式的一些常用函数:

re.search(pattern, string):在字符串中查找并返回第一个匹配的对象。

re.match(pattern, string):从字符串的开始位置匹配并返回第一个匹配的对象。

re.findall(pattern, string):找出字符串中所有匹配的对象并以列表形式返回。

re.sub(pattern, repl, string):将字符串中符合正则表达式的部分替换为指定的字符串。

re.split(pattern, string):使用正则表达式的模式分隔字符串,返回分隔后的列表。

re.compile(pattern):将正则表达式的模式编译为一个正则表达式对象,可以重复使用。

寻找第一个【匹对】的字符串,例如:

复制代码
# coding=utf-8

# 导入python正则库
import re

check_name = input()
# 使用正则匹配'lxj'的信息,结果存储到is_name中
is_name = re.search(r'lxj', check_name)

if is_name is not None:
    print(is_name.span())
else:
    print(is_name)

在很多常见的场景中需要进行多个匹配,比如在商品名单中过滤出所有的小*商品的个数。

有这种需求咱们可以使用 re 模块中的 findall 或者 finditer方法。两个方法的区别在于 findall 返回的是一个列表,finditer 返回的是一个生成器。

例如:

复制代码
# coding=utf-8

import re

input_str = input()

match_str = re.findall(r'[Pp]ython', input_str)

print(match_str)

正则表达式引擎使用连字符(-)来表示字符组中的区间,例如0-9匹配任意数字,a-z匹配任意小写字母,A-Z匹配任意大写字母。如果我们需要匹配连字符本身,需要对连字符进行转义。

例如:

复制代码
# coding=utf-8

import re

input_str = input()

# 获取到数字的正则
print(re.findall(r'[0-9]', input_str))

# 获取到不是数字的正则
print(re.findall(r'[^0-9]', input_str))

在正则表达式中,有一些预定义的字符类和特殊字符,它们可以帮助我们更简洁地表示某些常见的字符集合。以下是一些常用的预定义字符类和特殊字符及其描述:

  • \w:匹配任何字母、数字或下划线字符(等价于 a-zA-Z0-9_)。在 Python3 中,它还可以匹配其他语言的字母和数字。

  • \d:匹配任何数字字符(等价于 0-9)。在 Python3 中,它还可以匹配其他语言的数字。

  • \s:匹配任何空白字符,包括空格、制表符、换行符等。

  • \b:匹配一个单词边界,即单词开始或结束的位置。它可以帮助我们精确地匹配整个单词而不是部分单词。

这些预定义字符类和特殊字符可以简化正则表达式的编写,提高代码的可读性和效率。

例如:

python 复制代码
import re

text = "This is a sample sentence. It contains words and non-words."

# 匹配单词的正则表达式
word_pattern = r'\b\w+\b'
words = re.findall(word_pattern, text)
print("Words:", words)

# 匹配非单词的正则表达式
non_word_pattern = r'\b\W+\b'
non_words = re.findall(non_word_pattern, text)
print("Non-words:", non_words)

输出:

复制代码
Words: ['This', 'is', 'a', 'sample', 'sentence', 'It', 'contains', 'words', 'and', 'non', 'words']
Non-words: [' ', ' ', ' ', '. ', ' ', ' ', ' ', ' ', ' ', ' ']

在上面的程序中,我们使用了两个正则表达式模式。第一个模式\b\w+\b匹配一个或多个连续的单词字符,\b表示单词的边界。re.findall函数返回所有匹配的结果。

第二个模式\b\W+\b匹配一个或多个连续的非单词字符,\W表示非单词字符。也使用re.findall函数返回所有匹配的结果。

在给定的示例文本中,re.findall函数返回的结果包含空格字符和标点符号。你可以根据需要自定义模式来排除或包含特定的字符。

一个更简单的例子:

复制代码
# coding=utf-8

import re

input_str = input()

print(re.findall(r'\w', input_str))

print(re.findall(r'\W', input_str))
相关推荐
七夜zippoe22 分钟前
DolphinDB 高可用部署实战:从容灾设计到故障自动转移
开发语言·python·高可用·容灾·dolphindb
l12586523 分钟前
# LangGraph Deep Research Agent 全流程设计:多轮研究、人机协同与真实来源管理
数据库·人工智能·python·算法·自然语言处理·oracle·langchain
loopne1 小时前
AI网文写作实验笔记(十三):系列总结——12 篇实验、8 条核心结论,把“AI 写小说“每一步拆开验证
人工智能·经验分享·笔记·ai写作·智能写作
青少儿编程课堂1 小时前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛
HAPPY酷1 小时前
python的对象和方法
开发语言·python
M78佐菲1 小时前
Linux多线程:创建、回收与互斥同步
linux·笔记·学习·算法
the局外人1 小时前
别再背 Chain、Agent、Memory 了:用一条“智能流水线”学会 LangChain
python·langchain·llm
sunoo-2292 小时前
【Linux 系统编程】学习第七天:线程属性 | 互斥锁 | 死锁 | 信号量 核心知识点 + 踩坑实战
linux·c语言·笔记·vscode·学习
Zane19942 小时前
你以为的性能瓶颈,未必是真的瓶颈:用 cProfile 找到真凶
后端·python
铁手飞鹰2 小时前
VSCode Python .embed 嵌入式环境黄色波浪线问题
ide·vscode·python