资讯专栏INFORMATION COLUMN

Python re模块怎么实现正则表达式?具体操作是什么?

89542767 / 242人阅读

  小编写这篇文章的一个主要目的,主要是给大家去做一个介绍,介绍的内容主要是关于Python re模块的相关知识。包括怎么实现其正则表达式。具体的正则表达式要怎么去写呢?就这些问题,下文会给大家一个详细解答。


  一、前言


  在Python提供了re模块,用于实现正则表达式的操作。在实现时,可以使用re模块提供的方法(如,search()、match()、findall()等)进行字符串处理,也可以先使用re模块的compile()方法将模式字符串转换为正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串。


  如果使用re模块时,未将其引入,将抛出异常如图所示:

01.png

  二、匹配字符串


  匹配字符串可以使用re模块提供的match()、seardch()和findall()等方法。


  1.使用match()方法进行匹配


  match()方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回Match对象,否则返回None,语法格式如下:


  re.match(pattern,string,[flags])


  参数说明:


  pattern:表示模式字符串,由要匹配的正则表达式转换而来


  string:表示要匹配的字符串


  flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志如表所示:

02.png

  例如,匹配字符串是否以“mr_”开头,不区分字母大小写,代码如下:


  import re
  pattern=r"mr_w+"#模式匹配字符串
  string="MR_SHOP mr_shop"#要匹配的字符串
  match=re.match(pattern,string,re.I)#匹配字符,不区分大小写
  print(match)#输出匹配结果
  string="项目名称MR_SHOP mr_shop"
  match=re.match(pattern,string,re.I)#匹配字符,不区分大小写
  print(match)#输出匹配结果


  执行结果如下:

03.png

  从上面执行结果中可以看出,字符串"MR_SHOP"是以“mr_”开头,所以返回一个match对象,而字符串“项目名称MR_SHOP”不是以“mr_”开头,将返回“None”。这是因为match()方法从字符串的开始位置开始匹配,当第一个字母不符合条件时,则不再进行匹配,直接返回None。


  Match对象中包含了匹配值得位置和匹配数据,其中:


  要获取匹配值的起始位置可以使用Match对象的start()方法;


  要获得匹配值的结束位置可以使用end()方法;


  通过span()方法可以返回匹配位置元组;


  通过string属性可以获取要匹配的字符串


  代码如下:


  import re
  pattern=r"mr_w+"#模式匹配字符串
  string="MR_SHOP mr_shop"#要匹配的字符串
  match=re.match(pattern,string,re.I)#匹配字符,不区分大小写
  print("匹配值的起始位置",match.start())
  print("匹配值的结束位置",match.end())
  print("匹配位置元组",match.span())
  print("要匹配的字符串",match.string)
  print("匹配数据",match.group())


  执行结果如下:

04.png

  2.使用search()方法进行匹配


  search()方法用于在整个字符串搜索第一个匹配值,如果匹配成功,则返回match对象,否则返回None,语法格式如下:


  re.search(pattern,string,[flags])


  参数说明:


  pattern:表示模式字符串,由要匹配的正则表达式转换而来


  string:表示要匹配的字符串


  flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。


  例如,所示一个以“mr_”开头的字符串,不区分大小写,代码如下:


  import re
  pattern=r"mr_w+"#模式匹配字符串
  string="MR_SHOP mr_shop"#要匹配的字符串
  match=re.search(pattern,string,re.I)#匹配字符,不区分大小写
  print(match)#输出匹配结果
  string="项目名称MR_SHOP mr_shop"
  match=re.search(pattern,string,re.I)#匹配字符,不区分大小写
  print(match)#输出匹配结果

  执行结果如下:

06.png

  从上面运行结果中可以看出,search()方法不仅仅是在字符串的起始位置搜索,其他位置有符合的匹配也可以。


  3.使用findall()方法进行匹配


  findall()方法用于整个字符串中的搜索所有符合正则表达式的字符串,并以列表的形式返回,如果匹配成功,则返回包含匹配结构的列表,否则返回空列表。其语法格式如下:


  re.findall(pattern,string,[flags])


  参数说明:


  pattern:表示模式字符串,由要匹配的正则表达式转换而来


  string:表示要匹配的字符串


  flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。


  例如,所示一个以“mr_”开头的字符串,不区分大小写,代码如下:


  import re
  pattern=r"mr_w+"#模式匹配字符串
  string="MR_SHOP mr_shop"#要匹配的字符串
  match=re.findall(pattern,string,re.I)#匹配字符,不区分大小写
  print(match)#输出匹配结果
  string="项目名称MR_SHOP mr_shop"
  match=re.findall(pattern,string,re.I)#匹配字符,不区分大小写
  print(match)#输出匹配结果


  执行结果如下:

07.png

  如果在指定的模式字符串中,包含分组,则返回与分组匹配的文本列表。例如:


  import re
  pattern=r"[1-9]{1,3}(.[0-9]{1,3}){3}"#模式字符串
  str1="127.0.0.1 192.168.1.66"#要匹配的字符串
  match=re.findall(pattern,str1)#进行模式匹配
  print(match)


  执行结果如下:

08.png

  从上面结果中可以看出,并没有得到匹配的IP地址,这是因为在模式字符串中出现了分组,所以得到的结果是根据分组进行匹配的结果,即“(.[0-9]{1,3})”匹配的结果。如果想获取整个模式字符串的匹配,可以将整个模式字符串使用一对小括号进行分组,然后再获取结果时,只取返回值列表的每个元素(是一个元组)的第1个元素。代码如下:


  import re
  pattern=r"([1-9]{1,3}(.[0-9]{1,3}){3})"#模式字符串
  str1="127.0.0.1 192.168.1.66"#要匹配的字符串
  match=re.findall(pattern,str1)#进行模式匹配
  for item in match:
  print(item[0])


  执行结果如下:

09.png

  三、替换字符串


  sub()方法用于实现字符串替换,语法格式如下:


  re.sub(pattern,sep1,string,count,flags)


  参数说明:


  pattern:表示模式字符串,由要匹配的正则表达式转换而来


  sep1:表示替换的字符串


  string:表示查找要被替换的原始字符串


  count:可以参数,表示模式匹配后替换


  flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。


  import re
  pattern=r"1[34578]d{9}"#定义要替换的模式字符串
  string="中奖号码为:84978981联系电话为:13611111111"
  result=re.sub(pattern,"1xxxxxxxxxx",string)
  print(result)


  执行结果如下:

11.png

  四、使用正则表达式分割字符串


  splist()方法用于实现根据正则表达式分割字符串,并以列表的形式返回,其作用与字符串对象的splist()方法类似,所不同的就是分割字符由模式字符串指定。语法格式如下:


  re.splist(pattern,string,[maxsplist],[flags])


  参数说明:


  pattern:表示模式字符串,由要匹配的正则表达式转换而来


  string:表示要匹配的字符串


  maxsplist:可选参数,表示最大的拆分次数。


  flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。


  例如:从给定的URL地址中提取出请求地址和各个参数,代码如下:


  import re
  pattern=r"[?|&]"#定义分割符
  url='http://www.baidu.com/login.jsp?username="mr"&pwd="mrsoft"'
  result=re.split(pattern,url)#分割字符串
  print(result)

  执行结果如下:


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128299.html

相关文章

  • Python中的正则达式

    摘要:正则表达式就是用来描述他称为正则集的代数的表达式,因此采用正则表达式这个术语。文本中正则表达式结束搜索的索引值与和方法的同名参数相同。对象是一个编号的正则表达式通过提供的一系列方法可以对文本进行匹配查找。 一、概述 今天这篇文章带领大家学习一下Python中的正则表达式,当然了,正则表达式本身的内容就足以写好几本书了,我们这里列出的内容,仅仅是Python中常用的和基础的一些内容。 那...

    Juven 评论0 收藏0
  • Python正则达式保姆式教学,带你精通大名鼎鼎的正则

    摘要:今天来给大家分享一份关于比较详细的正则表达式宝典,学会之后你将对正则表达式达到精通的状态。正则表达式是用在方法当中,大多数的字符串检索都可以通过来完成。导入模块在使用正则表达式之前,需要导入模块。 ...

    tulayang 评论0 收藏0
  • 初探python之做一个简单小爬虫

    摘要:准备工作初探,这个文章属于自己的一个总结。所以教程面向新手,无技术含量。凡是报错信息看到,就是表示缩进不一致。注由于原网址不方便公布,代码中的网址全部替换为了。 准备工作 初探python,这个文章属于自己的一个总结。所以教程面向新手,无技术含量。python环境Linux基本都有,Windows下官网也提供了便利的安装包,怎么安装配置网上有很多教程在此就不一一说明。我使用的pytho...

    Juven 评论0 收藏0
  • python爬虫抓取纯静态网站及其资源

    摘要:下面跟大家详细分享一下写爬虫抓取静态网站的全过程。而我们上面说的元字符都代表一定的规则和占据一定的字符。 遇到的需求 前段时间需要快速做个静态展示页面,要求是响应式和较美观。由于时间较短,自己动手写的话也有点麻烦,所以就打算上网找现成的。 中途找到了几个页面发现不错,然后就开始思考怎么把页面给下载下来。 由于之前还没有了解过爬虫,自然也就没有想到可以用爬虫来抓取网页内容。所以我采取的办...

    daydream 评论0 收藏0
  • 怎么python正则达式提取/匹配中文汉字

      小编写这篇文章的一个主要目的,主要是给大家去做一个解答,解答的内容主要还是python相关事宜,比如,可以用python正则表达式去匹配和提取中文汉字,那么,具体的内容做法是什么呢?下面就给大家详细解答下。  python用正则表达式提取中文  Python re正则匹配中文,其实非常简单,把中文的unicode字符串转换成utf-8格式就可以了,然后可以在re中随意调用  unicode中中...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<