简谈python正则表达式

这篇文章里,我会尽量用比较浅显易懂的语言和给位看官讨论关于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

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

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

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

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

结果: 匹配结果为“right”
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正则表达式的常见知识、函数及其用法就先和各位介绍到这,有错误不足之处多谢指教,在下感激不尽。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值