这篇文章里,我会尽量用比较浅显易懂的语言和给位看官讨论关于python正则表达式的知识,我们首先来看看什么是正则表达式。

正则:使用单个字符串描述、匹配一系列语法规则的字符串。正则表达式就是用于对一个字符串的检索和处理。简单来说,正则表达式是一种字符串,每一个经过定义的正则都是一个对象。这个字符串的特殊之处在于是用来在其他字符串中做匹配的。在python中,我们通过调用re模块中的相关函数来实现正则表达式的各种功能,以最简单的匹配为例:

import re
eg='abcd'
project='abcdefghijklmnopqrstuvwxyz'
result=re.findall(eg,project)  #eg作为匹配用的正则表达式,project作为要进行匹配的字符串
print result

运行结果为:


为了能让您更好的理解正则表达式以及相关功能,我们为此编写了配套的相关.py文件。在这个实例中,我们定义一个字符串guojige(国际歌英文版的第一小段,以及后面加上的一些数字和特殊符号)作为正则表达式的匹配目标字符串,来验证相关理论和功能:

 # coding=utf-8
#定义目标字符串 guojige:
guojige='''
Stand up, all victims of oppression For the tyrants fear your might Don't cling so hard to your possessions For you have nothing, if you have no rights Let racist ignorance be ended For respect makes the empires fall Freedom is merely privilege extended Unless enjoyed by one and all. 12535456416815320351566@#&%&*(()^%$$%%^^&&{|\?///<.>%(*&%(¥
'''

正则表达式的特殊符号:

1、“.”:“.”表示可以匹配除换行符之外的所有字符。如果您不知道具体要匹配那个字符,您可以使用“.”来代替它。

import re
#s和t之间的两个用.来代替
result = re.findall('St..d', guojige)
print result

结果:
2、\ 转义字符:时后一个字符改变其在正则表达式中的含义并恢复原来的语义,也可以和某些字符搭配使用构成新的含义 (和“\n”表示换行、“\d”表示十进制整数一个道理)

import re
#匹配符号“^”,这里要取其原义,因为^符号在正则表达式中是“取反”的意思
result=re.findall('\^',guojige)
print result

结果:
3、[…]:字符集。在一个正则中出现就表示该正则字符串中对应位置可以是中括号内任意一个字符。例如正则“a[abc]c”就可能匹配到“aac”“abc”“acc”如果中括号内以“”开头就表示相应位置是除中括号内字符以外的任意字符。([abc]的作用相当于在相应位置过滤abc)

import re
#匹配rig[hljk]t中的hljk任意一字符
result=re.findall('rig[hljk]t',guojige)
print result

结果:
4、\s:空白字符。匹配字符串中的空格,换行符。

import re
#匹配“d a”,在此程序中打印出了第八行的“and all”中的“d a”
result=re.findall('d\sa',guojige)
print result

结果:
5、\S:非空白字符。与上一个符号相反,表示匹配非空字符。

6、\w:单词字符。匹配字符串中的大小写字母、0到9的阿拉伯数字。

import re
#匹配所有的字母、数字
result=re.findall('\w',guojige)
print result

结果:
7、\W:非单词字符。不构成单词的各种符号、特殊转义符。

import re
#匹配出所有不构成单词的符号、字符
result=re.findall('\W',guojige)
print result

结果:
8、、+、?:“”表示匹配前一个字符的0次或无数次;“+”表示匹配前一个字符的1次或无数次;“?”表示匹配前一个字符的0次或1次。

import re
result1=re.findall('al*',guojige)
result2=re.findall('al+',guojige)
result3=re.findall('al?',guojige)
print result1
print result2
print result3

结果:
我们可以看到,当命令匹配“al*”时,只要出现a的地方都会被打印出来,这是因为系统这时默认a后面的l数量是0,当遇到单词“all”时,则会认定l的数量时2,并打印出all;当匹配“al+”时,不存在考虑l数量为0的情况,所以打印出了三个“all”;匹配“al?”时,如果a后面没有l,则与“*”一样处理,当遇到单词“all”时,只用打印第一个“l”,第二个则不做考虑。

9、{m}、{m,n}:{m}表示匹配前一个字符m次,{m,n}表示匹配前一个字符m到n次。

import re
#匹配s两次以找到possessions
result=re.findall('pos{2}es{2}ions',guojige)
print result

结果:
其他常见模式:

\d 匹配任意数字,等价于 [0-9].
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z 匹配字符串结束
\G 匹配最后匹配完成的位置。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B 匹配非单词边界。’er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。

常见的正则表达式修饰符:(修饰符一般以参数的形式出现在函数中,不是必需品,但是可以对匹配工作的细节做一些补充)

re.l 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B。
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

python正则表达式常见函数:

re.findall()函数:语法:re.findall(pattern,string,flags=0) ——> list(列表)。即列出字符串中模式的所有匹配项,并作为一个列表返回。如果无匹配,则返回空列表!

>>> import re
>>> re.findall(r"ab","abcaaaab")
['ab', 'ab']    

re.compile()函数:语法:re.compile(pattern,flags=0) ——> pattern object。根据包含正则表达式的字符串创建模式对象,可以实现更有效率地匹配。用了re.compile以后,相当于创建了一个正则对象。这样在需要多次运用这个正则对象的时候,效率会有较大的提升。

>>> import re
>>> eg=r"Stand" #单独定义正则表达式时,语法为r"xxx"
>>> s=re.compile(eg)
>>> result=s.findall(guojige)
>>> print result
['Stand']

re.search()函数:语法:re.search(pattern, string, flags=0) ,返回: match object or None

re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。与findall函数不同的是,findall返回的是列表,而search()返回的是文本。

import re
s=r"abc"
com=re.compile(s)
print com.search("abcdef")
print com.search("hhhabc")


re.sub()函数:

语法:re.sub(pattern, repl, string, count=0, flags=0) 返回:string,将字符串中所有 pattern 的匹配项用 repl 替换。

>>> import re
>>> re.sub(r"abc","123","kklnabckkln")
'kkln123kkln'

re.subn()函数:语法与sub函数一样,只不过返回值为一个元组。元组中包含经过处理的字符串和替换次数。

>>> re.subn(r"kkln","123","kklnabckkln")
('123abc123', 2)

为了让大家更好的理解,我们将本篇博客用到的python文件整理了出来,链接如下,实在献丑,欢迎各位下载参考:
网页查看源代码
python正则表达式的常见知识、函数及其用法就先和各位介绍到这,有错误不足之处多谢指教,在下感激不尽。

简谈python正则表达式相关推荐

  1. python兼容性怎么样_简谈python的向下兼容性问题

    前两天在写python代码的时候,发现了一个问题.因为要使用email模块,使用 了其中一项导入语句:from email.mime.text import MIMEText,在python2.5下 ...

  2. python变量标识符_简谈-Python的注释、变量类型、标识符及关键字

    在Python程序中,要想支持中文输出,则要在代码前面添加 标识符:开发人员在程序中自定义的一些符号和名称 标示符是自己定义的,如变量名 .函数名等 标识符的规则: 标示符由字目.下划线和数字组成,且 ...

  3. 简谈-Python一些常用的爬虫技巧

    第一种:基本的网页抓取 get方法 import urllib2url = "链接response = urllib2.urlopen(url)print response.read() p ...

  4. python为什么是蛇_【大蟒蛇】简谈Python的闭包【原创】

    我们知道在Python中一切皆对象,包括函数也是一样,函数名可以赋值给一个变量,也可以当作一个参数传递给另外一个函数的形参,当然也可以将函数名作为另外一个函数的返回值使用,总之函数的使用可以非常的灵活 ...

  5. python nonlocal的用法_简谈Python3关键字nonlocal使用场景

    下面是之前提过的有待提升效率的计算移动平均的方法: def make_averager(): series = [] def averager(new_value): series.append(ne ...

  6. python中文字符串编码_浅谈python下含中文字符串正则表达式的编码问题

    前言 Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文. 所以py文件中要写中文字符时,一般在开头加 # -*- coding: utf-8 -*- 或者 #co ...

  7. python类中方法的执行顺序-浅谈Python的方法解析顺序(MRO)

    方法解析顺序, Method Resolution Order 从一段代码开始 考虑下面的情况: class A(object): def foo(self): print('A.foo()') cl ...

  8. python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题

    浅谈python中拼接路径os.path.join斜杠的问题 调试程序的过程中,发现通过os.path.join拼接的路径出现了反斜杠 directory1='/opt/apps/upgradePac ...

  9. python方法解析顺序_浅谈Python的方法解析顺序(MRO)

    方法解析顺序, Method Resolution Order 从一段代码开始 考虑下面的情况: class A(object): def foo(self): print('A.foo()') cl ...

最新文章

  1. 阿里云 OpenYurt 成为 CNCF 沙箱项目,加速原生 Kubernetes 边缘场景全覆盖
  2. 一个需要原创精神的年代
  3. 记一篇矫正牙齿、蛀牙(烂牙)。从小保护牙齿_(六龄齿封窝)
  4. python不及格_10 个 Python 工程师,9 个不合格!!
  5. java socket 阻塞模式_(四) 如何将socket设置为非阻塞模式
  6. HTML5大气外贸鞋子在线商城网站源码
  7. [POJ1733]Parity game(并查集 + 离散化)
  8. SQL中的数据转换服务,数据库迁移
  9. Spring相关笔记整理
  10. 华为p7刷android go,华为首款Android GO手机发布 1G内存也流畅
  11. 【NumPy基础】100道numpy练习——初学与入门篇
  12. python植物大战僵尸脚本_用 Python 实现植物大战僵尸代码!
  13. IEEE802.15.4、ZigBee、ZigBee协议栈、Zstack、ZigBee联盟、CC2530、IAR的关系?
  14. 非常全面的概念数据模型概述-PD下画E-R图
  15. 【美化桌面】删除电脑桌面快捷键箭头
  16. 2018公众号电商标准版功能解读
  17. MATLAB——复数运算
  18. go使用viper读取配置参数热加载
  19. php转换时间戳的一些方法
  20. 眼镜计算机检查,配眼镜时电脑验光到底准不准?

热门文章

  1. MySQL数据类型对应Java数据类型
  2. firefox支持mht
  3. 神经性脚臭案例整理(五)
  4. C#:Krypton控件使用方法详解(第十四讲) ——kryptonSeparator
  5. 两分钟解决IntelliJ IDEA中文乱码问题
  6. 星环科技自研技术,加速大数据从持久化、统一化、资产化、业务化到生态化
  7. 从vue项目简单了解什么是SSR
  8. 想了解更多的话就请加QQ或者访问我的新浪博客
  9. 最新猫眼电影反爬虫解密
  10. 渗透测试之后台查找,如何查找网站后台