当前位置: 首页 > news >正文

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 recheck_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-8import reinput_str = input()match_str = re.findall(r'[Pp]ython', input_str)print(match_str)

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

例如:

# coding=utf-8import reinput_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:匹配一个单词边界,即单词开始或结束的位置。它可以帮助我们精确地匹配整个单词而不是部分单词。

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

例如:

import retext = "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-8import reinput_str = input()print(re.findall(r'\w', input_str))print(re.findall(r'\W', input_str))

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 快速上手文心一言指令:解锁AI交互新体验
  • 【linux/shell】shell中使用for循环读取数据
  • three.js利用着色器实现波浪效果
  • 新手教学系列——慎用Flask-SQLAlchemy慢日志记录
  • C++_STL---list
  • 构建现代医疗:互联网医院系统源码与电子处方小程序开发教学
  • 身边的故事(十三):阿文的故事:出现
  • js 复制文本带样式
  • Transformation(转换)开发-switch/case组件
  • 【简单讲解下npm常用命令】
  • go Channel 原理 (一)
  • 初学Spring之 IOC 控制反转
  • Git使用[推送大于100M的文件后解救办法]
  • k8s 答疑
  • vector模拟实现【C++】
  • Apache Pulsar 2.1 重磅发布
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java面向对象及其三大特征
  • Spring Cloud中负载均衡器概览
  • 分享几个不错的工具
  • - 概述 - 《设计模式(极简c++版)》
  • 工程优化暨babel升级小记
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • ------- 计算机网络基础
  • 解析带emoji和链接的聊天系统消息
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 聊聊redis的数据结构的应用
  • 七牛云假注销小指南
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 提醒我喝水chrome插件开发指南
  • 学习HTTP相关知识笔记
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 用 Swift 编写面向协议的视图
  • 白色的风信子
  • MyCAT水平分库
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 容器镜像
  • 数据可视化之下发图实践
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Redis 入门到精通(七)-- redis 删除策略
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (5)STL算法之复制
  • (C语言)二分查找 超详细
  • (javaweb)Http协议
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET CLR基本术语
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 给NuGet包添加Readme