python 中 正则表达式 的应用

最近作业中出现了正则表达式,顺便学习了一下。

python比较厉害的一点就是自带对正则表达式的支持,用起来很方便

正则表达式

首先介绍一下什么是正则表达式。

正则表达式是用来进行字符串匹配的工具,在模式匹配中有广泛的应用。

正则表达式用若干符号来描述符合某一语法规则的字符串,从而实现匹配。

关于正则表达式的语法,参见维基百科,介绍的非常详细了。

一个用正则表达式写成的字符串也被成为模式串,意思是我们可以用这个串进行模式匹配。

python中正则表达式的应用

python内置了对正则表达式的支持,只需要import re即可使用正则表达式

有关python的re模块,最详细的资料莫过于python的官方文档,这里挑一些最常用的介绍一下。

正则表达式对象

首先,如果你想用正则表达式进行匹配,我们需要建立一个regular expression object,也就是所谓的正则表达是对象。python的re模块都是基于正则表达式对象进行操作的。

要想创建一个正则表达式对象,需要使用re.complie().其函数原型为re.complie(pattern, flags=0),pattern是一个字符串型,代表模式串,而flags是可选的,用于特殊情况的处理。比如re.I就表示匹配时忽略大小写,还有其他的flag可以参考官方文档。

例如,a=re.complie(r'abc\W*',re.I)的意思就是创建了一个正则表达式对象a,这个对象可以用来在忽略大小写的情况下匹配所有以abc开头的单词。

另外注意一点在写模式串的时候通常要用r字符串来抑制转义。

匹配函数

有了正则表达式对象,我们就可以进行匹配了。(下文中a代表刚才创建的正则表达式对象)

通常用于匹配的有两个函数,re.match()re.search(),下面分别介绍

  • re.match()

    这个函数是对一个单词从头进行匹配。如果我们已经有了一个正则表达是对象,我们可以直接使用a.match(string)来进行匹配,其中string是一个字符串,代表我们试图去跟模式串匹配的字符串。如果match成功,函数会返回一个MatchObject,即Match对象,否则返回None对象。例如
s1=a.match("aBcddD")
print(s1)
s2=a.match("abdfd")
print(s2)

其结果为

<_sre.SRE_Match object at 0x7fc8856f0370>
None

其中具体地址可能不一样,但是一定是一个Match object。

另外,re.match()可以直接完成创建正则表达式并进行匹配的任务,具体方法为使用 re.match(pattern, string, flags=0),其中各参数的含义和re.complie()相同,string是待匹配字符串。

例如

print (re.match(r'abc\W*',"aBcddD",re.I))
print (re.match(r'abc\W*',"abdfd",re.I))

其结果和上面的相同。

  • re.search()

    这个函数和re.match()完全类似,唯一的区别是re.search()可以从一个字符串中的任意位置开始匹配,而re.match()只能从开头进行匹配。

    例如
print (re.match(r'abc\W*',"wwaBcddD",re.I))
print (re.search(r'abc\W*',"wwaBcddD",re.I))

其输出为

None
<_sre.SRE_Match object at 0x7fc8856f0370>

MatchObject

通过上述的匹配函数,如果匹配成功,我们就会获得一个MatchObject,即Match对象。要想获得匹配的结果,我们需要对Match对象进行操作。Match对象的常用的几个操作如下

  • group

    re.group()函数用于获得MatchObject中的匹配成功的字符串。如果我们对于一个MatchObject调用group()函数就可以获得匹配成功的的字符串。例如
>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0) # The entire match
'Isaac Newton'
>>> m.group(1) # The first parenthesized subgroup.
'Isaac'
>>> m.group(2) # The second parenthesized subgroup.
'Newton'
>>> m.group(1, 2) # Multiple arguments give us a tuple.
('Isaac', 'Newton')

其中group(0)表示所有匹配字符串,而group(i)的表示具体第i个匹配字符串。

  • start()end()

    start()end()分别表示匹配开始的位置和匹配结束的位置。

本文仅介绍了re模块中几个最常用的部分,另外还有re.findall(),re.finditer,re.sub()等函数,具体可以参考官方文档。


恩,就这么写完了,真是良(jian)心(lue)啊√

python 中 正则表达式 的应用的更多相关文章

  1. 第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反

    一. 引言 在<第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反>中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反. 二. (?<=-)后视 ...

  2. python中正则表达式 re.findall 用法

    在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配. 其中,re.findall() 函数可以遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表. 在python源代码中 ...

  3. python中正则表达式re模块详解

    正则表达式是处理字符串的强大工具,它有自己特定的语法结构,有了它,实现字符串的检索,替换,匹配验证都不在话下. 当然,对于爬虫来说,有了它,从HTML里提取想要的信息就非常方便了. 先看一下常用的匹配 ...

  4. python中正则表达式在中文字符串匹配时的坑

    之前一直有使用python 正则表达式来做中文字符串或者中英文数字混合的字符串的匹配,发现有不少情况下会匹配失灵或者结果混乱,并且在不同操作系统上匹配结果也不一致,查了很久都不知道是什么原因.今天终于 ...

  5. js中正则表达式与Python中正则表达式的区别

    今天女票让我帮她写一个js中的正则,来提取电话号码,对于正则规则来说,js与python是基本没有区别的,重点的区别是在一些函数与方法中. python中的正则提取: import re str = ...

  6. Python中正则表达式讲解

    正则表达式是匹配字符串的强大武器,它的核心思想是给字符串定义规则,凡是符合规则的字符串就是匹配了,否则就是不合法的.在介绍Python的用法之前,我们先讲解一下正则表达式的规则,然后再介绍在Pytho ...

  7. 关于Python中正则表达式的反斜杠问题

    之前总是搞不明白正则表达式中的反斜杠的问题.今天经过查阅资料终于搞明白了. 其中最重要的一点就是Python自己的字符串中定义的反斜杠也是转义字符,而正则表达式中的反斜杠也是转义字符,所以正则表达式中 ...

  8. python中正则表达式

    正则表达式是一种通用的字符串匹配技术,是不会因为编程语言不一样而发生变化的如果想查找对应规则的字符串,就可以用正则表达式python中要使用正则表达式需使用re模块,它是正则表达式在python中的封 ...

  9. 第11.21节 Python 中正则表达式的其他扩展功能

    一. 引言 在<第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是正则表达式的扩展功能,其实在re模块中 ...

随机推荐

  1. 疯狂Html+CSS+JS 中JS总结

    来自:http://mzkmzk.github.io/blog/2015/10/05/amazeing-js/ 0 总结 本书的JS 第一章有讲语法有挺多常见的坑点和原理解释很不错 第二章DOM编程讲 ...

  2. 通过手机浏览器打开APP或者跳转到下载页面.md

    目录 通过手机浏览器打开APP或者跳转到下载页面 添加 schemes 网页设置 参考链接 通过手机浏览器打开APP或者跳转到下载页面 以下仅展示最简单的例子及关键代码 由于硬件条件有限,仅测试了 A ...

  3. 容器OOM相关

    使用容器的时候经常出现容器无缘无故重启的情况,首先我们要怀疑的应该是是否发生OOM了,通过以下命令可以查看 需要在容器的宿主机上在执行,宿主机上执行/var/log/dmesg有相关信息 dmesg ...

  4. POJ 2253 Frogger【最短路变形——路径上最小的最大权】

    链接: http://poj.org/problem?id=2253 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  5. iOS JS与原生交互(全集)

    混合开发的重要性不言而喻,一个移动端开发的了解前端开发是一个趋向,总之每个人都向往成为一个全栈工程师,废话不多说,直接上主题 一.交互(UIWebView) 1.OC调用JS (1)OC调用代码 [s ...

  6. 聚合的安全类导航、专业的安全知识学习平台——By Me:)

    以“基于对抗的安全研发”为初衷,让大家在工作中始终有安全意识.安全思维和安全习惯,几年前自己搭建了面向公司内部全员的安全晨报.现在站在“用户“的角度回头看看,觉得科目设计等很多方面都还有很多的不足: ...

  7. mysql与sql server参照对比学习mysql

    mysql与sql server参照对比学习mysql 关键词:mysql语法.mysql基础 转自桦仔系列:http://www.cnblogs.com/lyhabc/p/3691555.html ...

  8. 004-React入门概述

    一.概述 参考地址:https://reactjs.org/docs/try-react.html 1.1.本地快速体验 <!DOCTYPE html> <html> < ...

  9. MySQL之存储引擎(Day39)

    一 什么是存储引擎 mysql中建立的库=====>文件夹 库中建立的表=====>文件 现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存表格用excel,存图 ...

  10. NHibernate MappingException. No Persister

    在另一个Visual Studio项目(议会mm.k.Infrastructure)我有我的映射文件(一个映射目录),我的hibernate.cfg.xml和一些仓库. 这是我的映射文件: <? ...