热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python中正则表达式findall的用法实例【python基础】

在写着自动化测试的脚本时重新复习了一下正则表达式findall()方法,下面这篇文章主要给大家介绍了关于python中正则表达式findall用法的相关资料,文中通过实例代码介绍的

python中正则表达式findall的用法实例

正则口径:知道前后取中间,如果最后$结束

python中则这表达式的方法通常由re.match re.search re.findall

re.findall匹配的时候,会把结果放到list返回,如果没有匹配到返回空list不会报错

import re
 
s1=re.compile("d+")
# 匹配数字
r1=s1.findall("sahduasu27bhsagd7236vbcsahg923")
 
print(r1)
 
s2=re.compile("d+")
r2=re.findall(s2, "gashgddsh32hjsagd3jh4hjk234jkhk213")
print (r2)
 
 
r3=re.findall("d+", "sjdjsk1232kdsjf324string")
print(r3)
# 执行结果
# ["27", "7236", "923"]
# ["32", "3", "4", "234", "213"]
# ["1232", "324"]

 示例及常用方式:

import re
 
a = "hfdsakjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaab"
# 1.找出字符串中有多少个ab, 两个字符挨着
r1= re.findall(r"ab", a)
print(r1)
 
 
# 继续查找如ab, aab, aaab,aaaab这种,a可以重复,也就是匹配前面的a是1个或多个
# +是代表前面的字符出现1次或多次
 
r2= re.findall(r"a+b", a)
print(r2)
 
# *是代表匹配前面的字符出现0次或多次
 
r3= re.findall(r"a*b", a)
print(r3)
 
# 我们要匹配a和b之间有一个字符的,比如aab,abb,acb,adb都符合
 
# .就是匹配除 
 (换行符)以外的任意一个字符
 
r4= re.findall(r"a.b", a)
print(r4)
 
# 执行结果:
# ["ab", "ab", "ab", "ab"]
# ["ab", "ab", "ab", "aab"]
# ["ab", "ab", "ab", "b", "aab"]
# ["ajb", "aab"]

 贪婪与非贪婪:

import re
 
# 符号.* 贪婪,匹配从.*前面为开始到后面为结束的所有内容
a = "hfdsakjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaabsdf"
r1= re.findall(r"a.*b", a)
print(r1)
 
# 符号.*? 非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取
 
r2= re.findall(r"a.*?b", a)
print(r2)
 
# ["akjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaab"]
# ["akjhab", "ab", "ab", "ajb", "aab"]
import re
 
# # 符号.* 贪婪,匹配从.*前面为开始到后面为结束的所有内容
a = "hfdsakjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaabsdf"
r1= re.findall(r"hfdsak.*?jgdj", a)
print(r1)
 
r2= re.findall(r"hfdsak(.*?)jgdj", a)
print(r2)
# ["hfdsakjhabsdgfjhabhjgdj"]
# ["jhabsdgfjhabh"]
# 看到区别了么,就是取出来的数据是否带头尾

 re.S

前面匹配都是一整串没有换行的情况,如果我们需要匹配的内容,中间刚好有换行了,那就匹配不到了。

import re
 
a = """hfdsakjhabsdgfjhabhjgdj
abhjgajbkdkjdhfkaabsdf"""
r1= re.findall(r"hfdsak.*?kjdh", a)
print(r1)
# []
r2= re.findall(r"hfdsak(.*?)jgdj", a,flags=re.S)
print(r2)
# ["jhabsdgfjhabh"]

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 w, W, , B.
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志

补充:实战案例

如果上面的函数和参数含义都已经掌握了,还需要进一步通过案例加强理解,接下来举例说明上面的三个函数:

# 导入用于正则表达式的re模块
import re

# 取出字符串string8中所有的天气状态
string8 = "{ymd:"2018-01-01",tianqi:"晴",aqiInfo:"轻度污染"},{ymd:"2018-01-02",tianqi:"阴~小雨",aqiInfo:"优"},{ymd:"2018-01-03",tianqi:"小雨~中雨",aqiInfo:"优"},{ymd:"2018-01-04",tianqi:"中雨~小雨",aqiInfo:"优"}"
# 基于正则表达式使用findall函数
print(re.findall("tianqi:"(.*?)"", string8))

# 取出string9中所有含O字母的单词
string9  = "Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration of initiative and enterprise"
# 基于正则表达式使用findall函数
print(re.findall("w*ow*",string9, flags = re.I))

# 将string10中的标点符号、数字和字母删除
string10 = "据悉,这次发运的4台蒸汽冷凝罐属于国际热核聚变实验堆(ITER)项目的核二级压力设备,先后完成了压力试验、真空试验、氦气检漏试验、千斤顶试验、吊耳载荷试验、叠装试验等验收试验。"
# 基于正则表达式使用sub函数
print(re.sub("[,。、a-zA-Z0-9()]","",string10))

# 将string11中的每个子部分内容分割开
string11 = "2室2厅 | 101.62平 | 低区/7层 | 朝南 
 上海未来 - 浦东 - 金杨 - 2005年建"
# 基于正则表达式使用split函数
split = re.split("[-|
]", string11)
print(split)
# 分割结果的清洗
split_strip = [i.strip() for i in split]
print(split_strip)

out:
["晴", "阴~小雨", "小雨~中雨", "中雨~小雨"]
["Together", "discovered", "only", "to", "competition", "Our", "celebration", "of"]
据悉这次发运的台蒸汽冷凝罐属于国际热核聚变实验堆项目的核二级压力设备先后完成了压力试验真空试验氦气检漏试验千斤顶试验吊耳载荷试验叠装试验等验收试验
["2室2厅 ", " 101.62平 ", " 低区/7层 ", " 朝南 ", " 上海未来 ", " 浦东 ", " 金杨 ", " 2005年建"]
["2室2厅", "101.62平", "低区/7层", "朝南", "上海未来", "浦东", "金杨", "2005年建"]

如上结果所示:

第一个例子中通过正则表达式"tianqi:’(.*?)’“实现目标数据的获取,如果不使用括号的话,就会产生类似"tianqi:‘晴’”, "tianqi:‘阴~小雨’"这样的值,所以,加上括号就是为了分组,且仅返回组中的内容;

第二个例子并没有将正则表达式写入圆括号,如果写上圆括号也是返回一样的结果,所以findall就是用来返回满足匹配条件的列表值,如果有括号,就仅返回括号内的匹配值;

第三个例子使用替换的方法,将所有的标点符号换为空字符,进而实现删除的效果;

第四个例子是对字符串的分割,如果直接按照正则 ‘[,。、a-zA-Z0-9()]’ 分割的话,返回的结果中包含空字符,如 ‘2室2厅’ 后面就有一个空字符。为了删除列表中每个元素的首尾空字符,使用了列表表达式,并且结合字符串的strip方法完成空字符的压缩。

总结

到此这篇关于python中正则表达式findall用法的文章就介绍到这了,更多相关python正则表达式findall用法内容请搜索编程笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程笔记!


推荐阅读
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • 本文介绍了 Python 中的基本数据类型,包括不可变数据类型(数字、字符串、元组)和可变数据类型(列表、字典、集合),并详细解释了每种数据类型的使用方法和常见操作。 ... [详细]
  • 本文介绍了如何使用Python爬取妙笔阁小说网仙侠系列中所有小说的信息,并将其保存为TXT和CSV格式。主要内容包括如何构造请求头以避免被网站封禁,以及如何利用XPath解析HTML并提取所需信息。 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 本题涉及一种由Chip和Dale设计的文本加密方法。该方法通过预先约定的矩阵行数和列数,将字符转换为特定的二进制形式,并以螺旋方式填充矩阵。最终将矩阵中的二进制数连接成一个字符串,实现加密。 ... [详细]
  • 深入解析Java中的空指针异常及其预防策略
    空指针异常(NullPointerException,简称NPE)是Java编程中最常见的异常之一。尽管其成因显而易见,但开发人员往往容易忽视或未能及时采取措施。本文将详细介绍如何有效避免空指针异常,帮助开发者提升代码质量。 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • 本文详细介绍了如何使用JavaScript实现面部交换功能,包括基本原理和具体实现步骤。 ... [详细]
  • 本文介绍了如何将包含复杂对象的字典保存到文件,并从文件中读取这些字典。 ... [详细]
  • 题目描述:牛客网新员工Fish每天早上都会拿着一本英文杂志,在本子上写下一些句子。他的同事Cat对这些句子非常感兴趣,但发现这些句子的单词顺序被反转了。例如,“student. a am I”实际上是“I am a student.”。Cat请求你帮助他恢复这些句子的正常顺序。 ... [详细]
author-avatar
海风
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有