Python正则表达式re.search()用法详解

re.search():匹配整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None

pattern: 匹配的规则,

string : 要匹配的内容,

flags 标志位 这个是可选的,就是可以不写,可以写, 比如要忽略字符的大小写就可以使用标志位

flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

  1. re.I 忽略大小写
  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  3. re.M 多行模式
  4. re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  6. re.X 为了增加可读性,忽略空格和 # 后面的注释

示例代码:【检查字符串是否以 "Long" 开头并以 "China" 结尾

import re

s = "Long live the people's Republic of China"
ret = re.search("^Long.*China$", s)

print(ret)
print(ret.group())
print(ret[0])

运行结果:

示例代码:【在字符串中搜索第一个空白字符

import re

s = "Long live the people's Republic of China"
ret = re.search("\s", s)

print(ret)
print(ret.start())

运行结果:

示例代码:【如果search未匹配到,返回None】

import re

s = "Long live the people's Republic of China"
ret = re.search("USA", s)

print(ret)

运行结果:

示例代码:【忽略大小写】

import re

s = "Long live the people's Republic of China"
# ret1 = re.search('long', s)  这行代码直接报错
ret1 = re.search('l', s)
print(ret1)
print(ret1.span())
print(ret1.string)
print(ret1.group())

print("*" * 50)

ret2 = re.search('long', s, re.I)
print(ret2)
print(ret2.span())
print(ret2.string)
print(ret2.group())

运行结果:

示例代码:【group()的使用】

import re

s = 'abc123def456ghi789'
ret_compile = re.compile("([a-z]*)([0-9]*)([a-z]*)")
print(ret_compile)

ret = ret_compile.search(s)
print(ret)
print(ret.group())
print(ret.group(0))  # group()和group(0) 一样匹配的是整体
print(ret.group(1))  # 匹配第1个小括号的内容
print(ret.group(2))  # 匹配第2个小括号的内容
print(ret.group(3))  # 匹配第3个小括号的内容

运行效果:

示例代码:【group()分组的使用】

import re

s = 'abc123def456ghi789'
ret_compile = re.compile("(?P<num1>[a-z]*)(?P<num2>[0-9]*)(?P<num3>[a-z]*)")
print(ret_compile)

ret = ret_compile.search(s)
print(ret)
print(ret.group())
print(ret.group(0))  # group()和group(0) 一样匹配的是整体
print(ret.group(1))  # 匹配第1个小括号的内容
print(ret.group(2))  # 匹配第2个小括号的内容
print(ret.group(3))  # 匹配第3个小括号的内容

print("*" * 100)

print(ret.group())
print(ret.group("num1"))  # 这里效果等同于group(1)
print(ret.group("num2"))  # 这里效果等同于group(3)
print(ret.group("num3"))  # 这里效果等同于group(3)

运行效果:

总结:为匹配方便,能用search就不用match,match方法限定匹配时,头部必须是一致的

匹配演练:最后我们做些匹配演练,实战下

import re

html='''<div id="songs-list">
    <h2 class="title">经典老歌</h2>
    <p class="introduction">
        经典老歌列表
    </p>
    <ul id ="list" class="list-group">
        <li data-view="2">一路上有你</li>
        <li data-view="7">
            <a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
        </li>
        <li data-view="4" class="active">
            <a href="/3.mp3" singer="齐秦">往事随风</a>
        </li>
        <li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
        <li data-view="5"><a href="/5.mp3" singer="陈惠琳">记事本</a></li>
        <li data-view="5">
            <a href="/6.mp3" singer="邓丽君"><i class="fa fa-user"></i>但愿人长久</a>
        </li>
    </ul>
</div>
'''

上面是html代码,要求匹配出 第3个li标签中的齐秦 往事随风 ,代码如下:

result = re.search('<li.*?active.*?singer="(.*?)">(.*?)</a>',html,re.S)#re.S确保.能匹配到换行符
if result:
    print(result.group(1),result.group(2))

结果:

齐秦 往事随风

我们还要求匹配出第二个li标签中的内容 任贤齐 沧海一声笑

result = re.search('<li.*?singer="(.*?)">(.*?)</a>',html,re.S)
if result:
    print(result.group(1),result.group(2))

结果:

任贤齐 沧海一声笑

如果匹配时候不需要匹配换行符,那么参数中就没必要带re.S,比如匹配第4个和第5个li标签中的歌手和歌名。但是re.search也仅仅是返回一个符合匹配的结果。如果我们要返回符合匹配的所有结果,要用到re.findall。这一节的re.search就说到这里。

总结 

到此这篇关于Python正则表达式re.search()用法详解的文章就介绍到这了,更多相关Python re.search()用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python用正则表达式提取/匹配中文汉字

    目录 python用正则表达式提取中文 python正则如何匹配中文汉字 总结 python用正则表达式提取中文 Python re正则匹配中文,其实非常简单,把中文的unicode字符串转换成utf-8格式就可以了,然后可以在re中随意调用 unicode中中文的编码为/u4e00-/u9fa5,因此正则表达式u”[\u4e00-\u9fa5]+”可以表示一个或者多个中文字符 >>> import re >>> s='中文:123456aa哈哈哈bbcc'.decod

  • python正则表达式re.sub各个参数的超详细讲解

    目录 一.re.sub(pattern, repl, string, count=0, flags=0) 二.参数讲解 1.pattern参数 2.repl参数 2.1.repl是字符串 2.2.repl是函数 3.string参数 4.count参数 5.flags参数 5.1.IGNORECASE(简写I) 5.2.LOCALE(简写L) 5.3.MULTILINE(简写M) 5.4.DOTALL(简写S) 5.5.VERBOSE(简写X) 补充:repl为函数时的用法 总结 一.re.su

  • 解读python正则表达式括号问题

    目录 python正则表达式括号 python中re库函数的简单用法 python正则表达式入门教程括号及字符 括号区别 常用正则表达式 python正则表达式括号 python中re库函数的简单用法 re.findall(pattern,string) 匹配所有符合正则表达式的字符,返回一个列表 re.search(pattern,string) 查找第一个符合正则表达式的字符,返回一个Matcher对象.用group()或groups()方法取值 re.match(pattern,strin

  • python正则表达式对字符串的查找匹配

    目录 常用的RegEx基础语法 常用的RegEx函数 以下为部分示例: 总结 Python中的正则表达式要用到re模块,下面先介绍一下正则表达式需要用到的特殊字符和说明 常用的RegEx基础语法 语法 说明 \d 匹配一个数字字符 \D 匹配一个非数字字符 \s 匹配任何不可见字符(空格.制表符.换行符等) \S 匹配任何可见字符 \w 匹配任何单词字符 \W 匹配任何非单词字符 . 匹配所有字符 ^ 从字符串开头开始匹配,比如^\d表示以一个数字字符开头 $ 从字符串末尾开始匹配,比如\d$表

  • python中使用正则表达式的方法详解

    目录 search(pattern, string, flags=0) findall(pattern, string, flags=0) sub(pattern, repl, string, count=0, flags=0) compile(pattern, flags=0) flags的一些常用值 总结 在python中使用正则表达式,主要通过下面的几个方法 search(pattern, string, flags=0) 扫描整个string并返回匹配pattern的结果(None或对象

  • Python正则表达式分组

    Python正则表达式分组 分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组.从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式. 分完组以后,要想获得某个分组的内容,直接使用group(num)和groups()函数去直接提取就行. 例如:提取代码中的超链接中的文本 >>> s='<div><a href="https:/

  • python常用的正则表达式大全

    1.正则表达式 正则表达式是用来匹配与查找字符串的,从网上爬取数据自然或多或少会用到正则表达式,python的正则表达式要先引入re模块,正则表达式以r引导,例如: 其中**r“\d+”**正则表达式表示匹配连续的多个数值,search是re中的函数,从"abc123cd"字符串中搜索连续的数值,得到"123",返回一个匹配对象,结果如上. 2.字符串"\d"匹配0~9之间的一个数值 3.字符"+"重复前面一个匹配字符一次或者

  • Python正则表达式re.search()用法详解

    re.search():匹配整个字符串,并返回第一个成功的匹配.如果匹配失败,则返回None pattern: 匹配的规则, string : 要匹配的内容, flags 标志位 这个是可选的,就是可以不写,可以写, 比如要忽略字符的大小写就可以使用标志位 flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为: re.I 忽略大小写 re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境 re.M 多行模式 re.S 即为 . 并且包括换行符

  • Python正则表达式re.sub()用法详解

    目录 1.匹配单个数字或字母 2.匹配多个数字或字母 3.匹配其他 总结 源代码.参数及其意义: def sub(pattern, repl, string, count=0, flags=0): """Return the string obtained by replacing the leftmost non-overlapping occurrences of the pattern in string by the replacement repl. repl ca

  • python正则-re的用法详解

    天在刷题的时候用到了正则,用的过程中就感觉有点不太熟练了,很久没有用正则都有点忘了.所以现在呢,我们就一起来review一下python中正则模块re的用法吧. 今天是review,所以一些基础的概念就不做介绍了,先来看正则中的修饰符以及它的功能: 修饰符 •re.I 使匹配对大小写不敏感 •re.L 做本地化识别匹配 •re.M 多行匹配,影响^和$ •re.S 使.匹配包括换行在内的所有字符 •re.U 根据Unicode字符集解析字符.这个标志影响\w \W \b \B •re.X 该标志

  • python 正则表达式参数替换实例详解

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. 本章节主要介绍python 正则表达式参数替

  • Python中re.findall()用法详解

    在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.本文重点给大家介绍python中正则表达式 re.findall 用法 re.findall():函数返回包含所有匹配项的列表.返回string中所有与pattern相匹配的全部字串,返回形式为数组. 示例代码1:[打印所有的匹配项] import re s = "Long live the people's Republic of China" ret = re.findall('h', s) print(r

  • Python的Lambda函数用法详解

    在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数.今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式. 1.为什么要用lambda函数? 先举一个例子:将一个列表里的每个元素都平方. 先用def来定义函数,代码如下 def sq(x): return x*x map(sq,[y for y in range(10)]) 再用lambda函数来编写代码 map(lambda x: x*x,[y for y in r

  • 对python Tkinter Text的用法详解

    1.设置python Tkinter Text控件文本的方法 text.insert(index,string)  index = x.y的形式,x表示行,y表示列 向第一行插入数据,text.insert(1.0,'hello world') 2.清空python Tkinter Text控件文本的方法 #思路:从第一行清除到最后一行 text.delete(1.0,Tkinter.END) 以上这篇对python Tkinter Text的用法详解就是小编分享给大家的全部内容了,希望能给大家

  • 对Python中的@classmethod用法详解

    在Python面向对象编程中的类构建中,有时候会遇到@classmethod的用法. 总感觉有这种特殊性说明的用法都是高级用法,在我这个层级的水平中一般是用不到的. 不过还是好奇去查了一下. 大致可以理解为:使用了@classmethod修饰的方法是类专属的,而且是可以通过类名进行调用的.为了能够展示其与一般方法的差异,写一段简单的代码如下: class DemoClass: @classmethod def classPrint(self): print("class method"

  • python中yield的用法详解——最简单,最清晰的解释

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂的,我就想问没有有考虑过读者的感受. 接下来是正题: 首先,如果你还没有对yield有个初步分认识,那么你先把yield看做"return",这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了.看做return之后再把它

  • Python imread、newaxis用法详解

    这篇文章主要介绍了python imread.newaxis用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一:imread 用来读取图片,返回一个numpy.ndarray类型的多维数组,具有两个参数: 参数1 filename, 读取的图片文件名,可以使用相对路径或者绝对路径,但必须带完整的文件扩展名(图片格式后缀) 参数2 flags, 一个读取标记,用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什

随机推荐