美文网首页
正则表达式(三)

正则表达式(三)

作者: 叫我小包总 | 来源:发表于2019-04-29 23:10 被阅读0次

前言

  这两天在读刻意练习,这本书写的很好,里面有一段是这样写的:“我深深地困在,当前的处境中。四面高墙,定义了我的空间格局。我就在这里,生活了很多年,而且可能继续生活下去。我要尽全力将其打破,触及更加广阔的世界。”

这段话的描写很符合我现在的处境,研究生的生活在外人看来很光鲜,其实不然。我们就这样困在三维空间的一个小小局部里,而要离开这个位置,就要采取行动,而且是持续地行动。那么,我现在能做的就是夯实基础,坚持写作,用自身的力量打破这高墙,即使有一天没有做到,那也会让这高墙有一丝裂纹。

正文

我喜欢用实例来学习知识点,这样知识点就从抽象概念变得具体,一起来看看今天的例子吧。

例1:正则表达式忽略大小写

import re

language= 'pythonC#\nJavaPHP'

r= re.findall('C#',language)#Python在正则表达式重复的表示出来  ;大小写字符

# 正则表达式忽略大小写

r1= re.findall('c#.{1}',language,re.I|re.S)#re.S表示匹配所有字符,包括\n  |表示且关系;re.I忽略字母大小写

#'c#.{1}'首先匹配c#,再匹配任意字符

print(r)

print(r1)


这段代码中,findall函数还可以传入参数模式这个变量。当传入re.I时,正则表达式忽略大小写;当字符串中出现\n时,如果还要匹配出\n,可以看到,不仅正则表达式里面用到「. 」,但通过前面学习,「. 」表示匹配除\n的所有字符的概括集,所以,还需要在参数模式里再加上re.S,它表示匹配所有字符,其中|表示且关系。

例2:查找后替换

import re

language= 'pythonC#JavaC#PHPC#'

def convert(value):

    matched= value.group()#用group()函数取出对象value的值

    return '!!'+ matched+'!!'

r= re.sub('C#','GO',language,0)#0表示匹配无限匹配下去,最大匹配次数

r1= re.sub('C#',convert,language)

language= language.replace('C#','GO')#没有实现替换,需要新生成一个结果

print(r)

print(r1)

print(language)


对于这周应用场景,实现的方法很多。比如,可以用Python的内置函数.replace(),也可以用for遍历后再替换,或者用正则的表达式的函数re.sub()函数,下面就着重讲一下sub函数,它的第二个参数可以是函数,比如上面代码。

例3:re.sub函数

import re

s= 'A8C3721D86'

# s = 'A83C72D1D8E67'

def convert(value):

    matched= value.group()

if int(matched)>= 6:

        return '9'

    else:

        return '0'

r= re.sub('\d',convert,s)

print(r)


这里,将正则表达式要替换的部分用函数表示,在函数中加入条件判断,最终可以实现。

用函数作为替换值,好处很多的,比如,将给定的字符串变一下,其中数字有1位,也有2位,这时可以根据需求,设定条件替换掉数字。

例4:re.match函数和re.search函数

import re

s= 'A83C72D1D8E67'

#从字母串首字母开始,如果没找到,将会返回none

r= re.match('\d',s)

print(r)

#搜索整个字符串,直到找到满足正则表达式的第一个字符串,返回结果,不会继续往下搜索

r1= re.search('\d',s)

print(r1.group())

print(r1.span())#打印出搜索到第一个字符串的位置

r2= re.findall('\d',s)

print(r2)

#返回结果


正则表达式中常用的函数是re.findall(),此外还有的两个函数就是re.match()和re.search()。

re.match()函数,从字符串首字母开始查找,如果没有找到正则表达式,就会返回None。

re.search()函数,搜索整个字符串,直到找到满足正则表达式的第一个字符串,返回结果,但不会继续往下搜索。

代码中列出了三种函数的对比,通过打印结果可以知道,findall()相对最好用的、也是最常用ed函数。

例5:group()函数

import re

s= 'life is shot ,i use python, i love python'

r= re.search('life(.*)python(.*)python',s)

r1= re.findall('life(.*)python(.*)python',s)

print(r.group(0))#group(0)记录完整匹配结果

print(r.group(1))#0和1的区别

print(r.group(2))

print(r.group(0,1,2))#打印出0,1,2组的值

print(r.groups())#groups()不会返回完整匹配结果

print(r1)


最后,通过一个例子了解一下group这个分组函数。在上面这行代码中,正则表达式中用life和Python作为匹配的边界,将(.*)作为一组匹配值。

group(0)是group函数的特殊形式,它记录完整的匹配结果,还要注意到groups()它不会返回完整匹配结果,它会把匹配到的结果打印出来。

相关文章

  • 正则表达式

    Python正则表达式初识(一) Python正则表达式初识(二) Python正则表达式初识(三) Python...

  • 正则表达式(1)

    本博客来自精通正则表达式第三版 第一章:正则表达式入门(Introduction to regex) 正则表达式概...

  • 2018-11-02jmeter关联,正则表达式

    在线工具 一、Jmeter关联的方式 2、设置正则表达式提取器 三、关于正则表达式的举例说明 正则表达式: 1.取...

  • 常用的正则表达式

    一、主要是验证数字的常见正则表达式: 二、主要校验字符的正则表达式: 三、特殊需求正则表达式: 下面给大家介绍在前...

  • R 正则表达式

    前言 R中的正则表达式模式有三种 1、扩展正则表达式:默认方式 2、Perl风格正则表达式:设置参数perl = ...

  • day 14

    第十一章 Linux正则表达式与三剑客知识应用实践 1.1、正则表达式 1.1.1、介绍 通过正则表达式可以将...

  • 正则表达式最佳实践

    主要内容包括 一、简介二、正则表达式的PlayGround三、基本语法表及简介四、正则表达式实例五、正则表达式在I...

  • python group()

    正则表达式中的三组括号把匹配结果分成三组group() 同group(0)就是匹配正则表达式整体结果group(1...

  • 正则表达式快速入门

    正则表达式的引擎分为三种:NFA、DFA、POSIX NFAJavaScript 使用的是 NFA 的正则表达式引...

  • 粗通正则表达式

    前言 本文并非原创,内容分别摘自维基百科、《精通正则表达式》第三版、正则表达式30分钟入门教程。 什么是正则表达式...

网友评论

      本文标题:正则表达式(三)

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