zoukankan      html  css  js  c++  java
  • Re 模块

    re模块提供方法如compile, search, findall, match和其他的方法。这些函数是使用REGEX语法建立了一个模式来处理文本的。

    第一个方法:search.

    一个基本的搜索工作原理是这样的:

    >>> import re

    >>> mo = re.search(“hello”,”Hello world, hello Python!”)

    re模块中的search需要将第一个参数作为第二个参数的模式。上面那个“hello”是第一个参数,也是一个模式,”Hello world, hello Python!”是第二个参数,是要匹配的字符串。在这种情况下,该模式可以被翻译为“h随后由ello组成”。当找到一个匹配,这个函数返回匹配的对象(在这里,被称为mo)与第一个匹配的信息。如果没有匹配,返回None。这里可以通过显示的方法查询匹配对象:

    >>> mo.group()  #group()返回REGEX(也即是“hello”这个模式)匹配的字符串,“hello”模式匹配hello,所以用group()会返回匹配的结果,也就是hello

    ’hello’

    >>> mo.span() #span()返回一个包含匹配的(起点,终点)位置元组。

    (13, 18)

    而用mo.start()和mo.end()分别返回起点和重点:

    >>> mo.start()
    13
    >>> mo.end()
    18

    当模式未匹配到结果时,会返回None,例如:

    >>> mo = re.search("hhello","Hello world,hello python")

    >>> print (mo)
    None

    如果我们想匹配同时匹配“Hello”和“hello”:

    >>> import re

    >>> mo = re.search(“[Hh]ello”,”Hello world, hello Python!”)

    第一个匹配返回:

    >>> mo.group()

    ’Hello’

    但是用search好像匹配到一个结果就停止啦,需要用到findall。

    第二个方法:findall。

    为了找到所有的匹配,而不仅仅是第一个,用findall:

    >>> re.findall(“[Hh]ello”,”Hello world, hello Python,!”)

    [’Hello’, ’hello’]                                                        #这里findall会将所有的匹配结果以列表的形式返回,而不是像search那样返回的是一个匹配对象。

    这里findall返回实际匹配的列表,而不是匹配对象。

    search和findall的区别如下:

    >>> mo1 = re.findall("[Hh]ello","Hello world, hello Python!")   
    >>> mo1
    ['Hello', 'hello']

    findall会将匹配的所有结果作为“列表”返回,这里赋给mo1,所以mo1是所有匹配结果的列表。

    >>> mo2 = re.search("[Hh]ello","Hello world,hello python")
    >>> mo2
    <_sre.SRE_Match object; span=(0, 5), match='Hello'>

    >>> mo2.group()
    'Hello'

    但是search返回的只是一个match对象,就想上面mo2的值。要想将match的结果显示出来,就需要用group()。

    re.finditer

    如果我们希望返回每一个匹配的匹配对象,用finditer方法。作为一个额外的奖励,它不会返回一个列表,而是一个迭代器。这意味着,每次finditer的调用,它返回它们的下一个元素而无需一次计算得到。对任何的迭代,可以优化内存的使用:

    >>> re.finditer(“[Hh]ello”,”Hello world, hello Python,!”)

    <callable-iterator object at 0xb6f43d8c>

    遍历这些结果:

    >>> mos = re.finditer(“[Hh]ello”,”Hello world, hello Python,!”)

    >>> for x in mos:

                print (x.group())

    结果是:

    Hello
    hello

    第三个方法:match。

    match方法和search一样,可是它只是匹配字符串的开始。当没有模式被找到,它返回None。

    >>> mo = re.match(“hello”, “Hello world, hello Python!”)

    >>> print mo

    None

    和search一样,当模式没有找到,它返回None。

    >>> mo = re.match(“Hello”, “Hello world, hello Python!”)

    >>> mo

    <_sre.SRE_Match object at 0xb7b5eb80>   #match同search类似,返回的也是一个配对对象,而不是像findall那样返回的是匹配的结果列表。

    匹配对象可以被查询得到:

    >>> mo.group()

    ’Hello’

    >>> mo.span()

    (0, 5)

  • 相关阅读:
    Unity资源打包学习笔记(一)、详解AssetBundle的流程
    Unity实现c#热更新方案探究(三)
    Unity实现c#热更新方案探究(二)
    Unity实现c#热更新方案探究(一)
    对C#热更新方案ILRuntime的探究
    Unity使用C++作为游戏逻辑脚本的研究(二)
    执行composer install/update 命令遇 "You are using an outdated version of Composer. Composer 2.0 is abo...
    php 安装xdebug进行调试(phpstorm)
    phpstudy如何设置Nginx伪静态
    JS正则表达式
  • 原文地址:https://www.cnblogs.com/nklzj/p/6259218.html
Copyright © 2011-2022 走看看