博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python正则表达式之使用规则
阅读量:5218 次
发布时间:2019-06-14

本文共 1762 字,大约阅读时间需要 5 分钟。

     正则表达式在我看来是提供一个模板,将待匹配的字符串与模板匹配,匹配不到则返回为空,匹配成功根据需要返回匹配的字符串。

正则表达式比字符串本身的功能要强一点,当然性能上略有不如。

    我们使用正则表达式主要有两种目的,

       是否包含模板字符串;

       > 得到匹配字符串。

     python 中使用正则表达式时需要引入“re”模块,为了避免记忆上的混乱,本文只记载一种最常用的使用正则表达式的方式。

使用流程:

1 # encoding:utf-8 2  3 # 引入re模块 4 import re 5  6 #生成正则表达式模板 7 pat = re.compile(r'12') 8  9 #匹配结果10 m=pat.search("123 12")11 print m12 13 #匹配结果14 m=pat.search("3 2")15 print m16 17 # 输出:18 # <_sre.SRE_Match object at 0x01FCFB48>19 # None

match()和search()区别

在一些示例中,在匹配结果也会用到match方法,match和search的区别如下:

         match :只从字符串的开始与正则表达式匹配,匹配成功返回matchobject,否则返回none;

   search :将字符串的所有字串尝试与正则表达式匹配,如果所有的字串都没有匹配成功,返回none,否则返回matchobject;

示例如下:

pat = re.compile(r'12')m=pat.search("312")print m# <_sre.SRE_Match object at 0x01FCFB48>m=pat.match("312")print m# Nonem=pat.match("123")print m# <_sre.SRE_Match object at 0x01FCFB48>

分组的概念和findall()

当我们想将符合正则规则的字符串提取时,可以用()将规则包起来即可。例如:我们想提取超链接

pat = re.compile(r'href="([^"]*)"')s = '起点中文'm = pat.search(s)print m.group(0)# href="http://www.qidian.com/print m.group(1)# http://www.qidian.com/

“()”表示我们想要提取的字符串内容,用group()函数方法取得,group(0) 取得匹配的字符串,group(1)取得第一个分组。

当要取得所有符合规则的字符串时我们可使用findall()方法

pat = re.compile(r'href="([^"]*)"')s = '起点中文起点中文'm = pat.findall(s)print m#['http://www.qidian.com/', 'http://www.qidian.com/']

此时若匹配返回的结果是一个list。

反斜杠的困扰

pat = re.compile(r'href="([^"]*)"')

正则里面有个‘r’是原生字符串的意思,它表示不转义,例如:

  

path="c:\noway"print path# c:# owaypath=r"c:\noway"print path# c:\noway

正则表达式用”\\”表示反斜杠符号,因此当要匹配字符串中的“\\”时需要用“\\\\”,前两个表示一个反斜杠即转义字符,后两个表示真正的反斜杠。当加上前缀r时,就只用“\\”匹配反斜杠。

示例如下:

re_str_patt = "\\\\"reObj = re.compile(re_str_patt)str_test = "abc\\cd\\hh"print reObj.findall(str_test)# ['\\', '\\']r_str_patt = r"\\"print reObj.findall(str_test)# ['\\', '\\']

 

  

转载于:https://www.cnblogs.com/moye13/p/5286483.html

你可能感兴趣的文章
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
字典【Tire 模板】
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
Perl IO:IO重定向
查看>>
转:基于用户投票的排名算法系列
查看>>
WSDL 详解
查看>>