美文网首页虫虫随笔-生活工作点滴
python学习笔记——re模块

python学习笔记——re模块

作者: 8cf7138a28df | 来源:发表于2019-07-10 19:57 被阅读1次

    re模块

    在Python中,通过内置的re模块提供对正则表达式的支持。正则表达式会被编译成一系列的字节码,然后由通过C编写的正则表达式引擎进行执行。该引擎自从Python1.6被内置以来,近20年时间未有发生过变化

    re模块支持下面的正则语法:

    "."  "^"     "$"  "*"   "+"     "?"     *?,+?,??   {m,n}    {m,n}?   "\\"   []     "|"     (...)   (?aiLmsux)     (?:...) 

    (?P<name>...)   (?P=name)   (?#...)   (?=...)  (?!...)  (?<=...)   (?<!...)   (?(id/name)yes|no)

    提供了下面的方法进行字符串的查找、替换和分割等各种处理操作

    反斜杠的困扰:\

    与大多数编程语言相同,正则表达式里使用\作为转义字符,这可能造成反斜杠困扰。假如需要匹配文本中的字符\,那么使用编程语言表示的正则表达式里将需要4个反斜杠\\\\。前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。为了方便我们使用个,Python提供了原生字符串的功能,很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以直接写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

    compile(pattern, flags=0)

    这个方法是re模块的工厂方法,用于将字符串形式的正则表达式编译为Pattern模式对象,可以实现更高效率的匹配。第二个参数flag是匹配模式。

    使用compile()完成一次转换后,再次使用该匹配模式的时候就不用进行转换了。经过compile()转换的正则表达式对象也能使用普通的re方法。其用法如下:

    经过compile()方法编译过后的返回值是个re对象,它可以调用match()、search()、findall()等其他方法,但其他方法不能调用compile()方法。实际上,match()和search()等方法在使用前,Python内部帮你进行了compile的步骤。


    match(pattern, string, flags=0)

    match()方法会在给定字符串的开头进行匹配,如果匹配不成功则返回None,匹配成功返回一个匹配对象,这个对象有个group()方法,可以将匹配到的字符串给出。


    search(pattern, string, flags=0)

    在文本内查找,返回第一个匹配到的字符串。它的返回值类型和使用方法与match()是一样的,唯一的区别就是查找的位置不用固定在文本的开头。

    findall(pattern, string, flags=0)

    作为re模块的三大搜索函数之一,findall()和match()、search()的不同之处在于,前两者都是单值匹配,找到一个就忽略后面,直接返回不再查找了。而findall是全文查找,它的返回值是一个匹配到的字符串的列表。这个列表没有group()方法,没有start、end、span,更不是一个匹配对象,仅仅是个列表!如果一项都没有匹配到那么返回一个空列表。

    如何拆分含有多种分隔符的字符串

    我们要把某字符串依据分隔符号拆分不同的字段,该字符串包含多种不同的分隔符,例如:

    s = 'ab;cd|efg|hi|hi,jkl\topq;str,ubw\asyd'

    其中<,>,<;>,<|>,<\t> 都是分隔符号,如何处理?

    可以连续使用str.split()方法,每次处理一种分割符号

    有需要资料的小伙伴,记得加小柠檬VX哦 !!

    相关文章

      网友评论

        本文标题:python学习笔记——re模块

        本文链接:https://www.haomeiwen.com/subject/apekkctx.html