0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python正则表达式中的常用函数

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-18 16:12 次阅读

1、compile():

  • 编译正则表达式模式,返回一个正则对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)
  • 格式:re.compile(pattern[,flags=0])
    • pattern: 编译时用的表达式字符串。
    • flags: 编译标志位,用于修改正则表达式的匹配方式,如:re.I(不区分大小写)、re.S等
import re
tt = "Tina is a good girl, she is cool, clever, and so on..."
rr = re.compile(r'\w*oo\w*')
print(rr.findall(tt))   #查找所有包含'oo'的单词
# 执行结果如下:
# ['good', 'cool']

2、match()

  • 决定RE是否在字符串刚开始的位置匹配。
  • //注:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。
  • 格式:re.match(pattern, string[, flags=0])
print(re.match('com','comwww.csdn').group())
print(re.match('com','Comwww.csdn',re.I).group())
#执行结果如下:
#com
#com

3、search()

  • 格式:re.search(pattern, string[, flags=0])
  • re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。
print(re.search('\dcom','www.4comcsdn.5com').group())
执行结果如下:
# 4com
  • 注:match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:
    • group() 返回被 RE 匹配的字符串
    • start() 返回匹配开始的位置
    • end() 返回匹配结束的位置
    • span() 返回一个元组包含匹配 (开始,结束) 的位置
import re
a = "123abc456"
 print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0))   #123abc456,返回整体
 print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1))   #123
 print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2))   #abc
 print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3))   #456
###group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。###

4、findall()

  • re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
  • 格式:re.findall(pattern, string[, flags=0])
p = re.compile(r'\d+')
print(p.findall('o1n2m3k4'))
执行结果如下:
['1', '2', '3', '4']
import re
tt = "Tina is a good girl, she is cool, clever, and so on..."
rr = re.compile(r'\w*oo\w*')
print(rr.findall(tt))
print(re.findall(r'(\w)*oo(\w)',tt))#()表示子表达式 
执行结果如下:
['good', 'cool']
[('g', 'd'), ('c', 'l')]

5、split()

  • 按照能够匹配的子串将string分割后返回列表。
  • 可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。
  • 格式:re.split(pattern, string[, maxsplit])
    • maxsplit: 用于指定最大分割次数,不指定将全部分割。
print(re.split('\d+','one1two2three3four4five5'))

# 执行结果如下:
# ['one', 'two', 'three', 'four', 'five', '']

6、sub()

  • 使用re替换string中每一个匹配的子串后返回替换后的字符串。
  • 格式:re.sub(pattern, repl, string, count)
import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
print(re.sub(r'\s+', '-', text))

执行结果如下:
JGood-is-a-handsome-boy,-he-is-cool,-clever,-and-so-on...
其中第二个函数是替换后的字符串;本例中为'-'
第四个参数指替换个数。默认为0,表示每个匹配项都替换。
  • re.sub还允许使用函数对匹配项的替换进行复杂的处理。
  • 如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0);将字符串中的空格' '替换为'[ ]'。
import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
print(re.sub(r'\s+', lambda m:'['+m.group(0)+']', text,0))
执行结果如下:
JGood[ ]is[ ]a[ ]handsome[ ]boy,[ ]he[ ]is[ ]cool,[ ]clever,[ ]and[ ]so[ ]on...

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 格式
    +关注

    关注

    0

    文章

    23

    浏览量

    16865
  • 字符串
    +关注

    关注

    1

    文章

    577

    浏览量

    20485
  • python
    +关注

    关注

    56

    文章

    4781

    浏览量

    84448
收藏 人收藏

    评论

    相关推荐

    nginx正则表达式和location路径匹配指南

    前言,我这里验证的nginx-v1.23.2单机环境下的nginx正则表达式、location路径匹配规则和优先级。
    的头像 发表于 09-29 16:02 465次阅读
    nginx<b class='flag-5'>中</b>的<b class='flag-5'>正则表达式</b>和location路径匹配指南

    求助,以下恒流源电路Io的计算表达式怎么计算?

    这个恒流源电路Io的计算表达式怎么计算,求给出详细计算过程
    发表于 08-22 08:16

    TestStand表达式常用的语法规则和运算符使用

    TestStand也有自己的语言嘛?在回答这个问题之前大家可以想一下在使用TestStand时有一个和语言密切相关的属性。没错那就是表达式(Expressions),在这篇文章,小编将以Q&A的方式来带着大家来理解并熟悉TestStand
    的头像 发表于 08-15 18:10 1085次阅读
    TestStand<b class='flag-5'>表达式</b>中<b class='flag-5'>常用</b>的语法规则和运算符使用

    鸿蒙原生应用元服务开发-仓颉基本概念表达式(二)

    。for-in 表达式的基本形式为: for (迭代变量 in 序列) { 循环体 } 其中“循环体”是一个代码块。“迭代变量”是单个标识符或由多个标识符构成的元组,用于绑定每轮遍历由迭代器指向的数据,可以
    发表于 08-09 14:26

    鸿蒙原生应用元服务开发-仓颉基本概念表达式(一)

    实参等。此外,因为仓颉是强类型的编程语言,所以仓颉表达式不仅可求值,还有确定的类型。 仓颉编程语言的各种表达式将在后续章节逐一介绍,本节介绍最常用的条件
    发表于 08-08 10:27

    求助,有关表达式选项卡(ADS)的问题求解

    你好。 我看不到表达式选项卡的某些变量值。 数组的大小显然是 256,但我最多只能看到 100。 请问问题出在哪里? 谢谢。
    发表于 06-03 06:23

    mapgis属性筛选表达式

    篇文章,我们将详细讨论MapGIS的属性筛选表达式,包括语法、操作符和函数等。 属性筛选表达式是一种在MapGIS中用于指定要素选择条件的代码。它由一组操作符、
    的头像 发表于 02-25 10:58 1470次阅读

    西门子博途的算术表达式

    算术表达式既可以是一个数字值,也可以是由带有算术运算符的两个值或表达式组合而成。 算术运算符可以处理当前 CPU 所支持的各种数据类型。如果在该运算中有 2 个操作数,那么可根据以下条件来确定结果的数据类型。
    的头像 发表于 01-24 11:36 945次阅读

    你还不会gvim正则表达式?一文搞懂!

    gvim正则表达式常在命令行模式下使用,一般用于文本文件字符串的替换、删除等操作。
    的头像 发表于 01-19 16:47 1090次阅读

    rs触发器的逻辑表达式

    逻辑表达式是描述逻辑关系的符号表示,可以用于定义和描述各种电路和逻辑操作。在逻辑电路,RS触发器是一种基本的存储器元件,也被称为锁存器。 RS触发器是由两个与门组成的,其输出互相连接,形成一个反馈
    的头像 发表于 01-12 14:09 2863次阅读

    更快的tsv解析代码分享

    使用正则解析的正则表达式很简单, 这里直接给代码, 为了避免重复编译正则表达式和重新分配内存报错结果列表, 这里将她们作为参数传给解析函数.
    的头像 发表于 12-29 09:45 397次阅读
    更快的tsv解析代码分享

    GVIM正则表达式介绍和使用示例

    的Ken Thompson借用这个概念并将它应用到了文本编辑器。后面正则表达式的说法进入到了大家常用的vi、vim、gvim当中。
    的头像 发表于 12-18 15:09 1164次阅读
    GVIM<b class='flag-5'>正则表达式</b>介绍和使用示例

    一文详解Java表达式引擎选型

    AviatorScript 是一门高性能、轻量级寄宿于 JVM 之上的脚本语言。AviatorScript 可将表达式编译成字节码。它原来的定位一直只是一个表达式引擎,不支持 if/else 条件
    的头像 发表于 12-06 10:57 1811次阅读
    一文详解Java<b class='flag-5'>表达式</b>引擎选型

    如何从一个简单的数学表达式创建一个Saber模型?

    如何从一个简单的数学表达式创建一个Saber模型,将你的输出描述为输入的函数?例如 out=a*in*in+b (其中 a 和 b 是常数)。
    的头像 发表于 12-05 13:42 685次阅读
    如何从一个简单的数学<b class='flag-5'>表达式</b>创建一个Saber模型?

    SIMATIC S7-1500 PLC S7-SCL表达式详解

    表达式为了计算一个终值所用的公式,它由地址(变量)和运算符组成。表达式的规则如下。
    的头像 发表于 11-28 09:36 1058次阅读
    SIMATIC S7-1500 PLC S7-SCL<b class='flag-5'>表达式</b>详解