登录
首页精彩阅读Python正则表达式之基础篇
Python正则表达式之基础篇
2017-08-09
收藏

Python正则表达式之基础篇

正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。

其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同。

它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式的语言里,正则表达式的语法都是一样的。

下图展示了使用正则表达式进行匹配的流程:

1.1介绍

正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。

1.2要知道的各种用法

模式字符串使用特殊的语法来表示一个正则表达式

字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。多数字母和数字前加一个反斜杠时会拥有不同的含义。标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。反斜杠本身需要使用反斜杠转义。

由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'/t',等价于'//t')匹配相应的特殊字符。

下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。

当然这些用法很多,待会会给出经常使用到的用法,多试试就能理解了。

模式

字符类

特殊字符类

1.3re.match函数
  re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
  re.match(pattern, string, flags = 0)
  pattern 正则表达式
  string 匹配的字符串
  flags 标志位,用来控制匹配方式,下文会讲
  直接上程序:    
import string,re
r = "abc" #正则表达式
if re.match(r,"abc"): #匹配
print 'done'
else:
print 'defeat'
结果:
  done
可以根据上面各表给出的用法,多练练:    
import string,re
r = "a.c" #正则表达式 . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
if re.match(r,"abc"):
print re.match(r,"abc")
print 'done'
else:
print 'defeat'
结果:
<_sre.SRE_Match object at 0x01dd6158>
done
  注意这里不是显示匹配成功的字符串,re.match() 返回的是一个对象,不成功返回的是none.
  我们可以通过group(num)或groups()匹配对象函数来获取匹配表达式。 

程序:       
import string,re
r = "a.c"
if re.match(r,"abc"):
line = re.match(r,"abc")
print line.group()
else:
print 'defeat'

结果:

  abc

1.3re.search函数

re.search() 扫描整个字符串并返回第一个成功的匹配
  re.search(pattern, string, flags=0)
  pattern 正则表达式
  string 匹配的字符串
  flags 标志位,用于控制匹配方式
  和re.match()一样,匹配成功re.search方法返回一个匹配的对象,否则返回None。
  直接上程序:    
import string,re
r = "abc"
s = 'aacawcabc'
if re.search(r,s):
line = re.search(r,s)
print line.group()
结果:
abc
注意:
re.match()和re.search()的区别:
  re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
1.4re.sub函数

  re.sub()函数用于替换匹配项。

  re.sub(pattern,repl,string,max = 0)

  pattern 正则表达式

  repl 替换 项

  string 匹配的字符串

  count 替换的最大次数 缺省值是0 表示替换所有的匹配

  返回的字符串是在字符串中用 RE 最左边不重复的匹配来替换。如果模式没有发现,字符将被没有改变地返回。

  程序:    
import string,re
pattern = '\d'
repl = "!"
s = 'abcdefg'
line = re.sub(pattern,repl,s)
print line

结果:

!!!!!!!!!abcdefg

1.5正则表达式修饰符 - 可选标志

我们来说说什么是标志位:

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:

程序:     
import string,re
pattern = '[Aa][Bb][Cc][Dd]'
s = 'AbCd'
if re.match(pattern,s):
line = re.match(pattern,s)
print line.group()

结果:

AbCd

上面程序可以通过选择标志位来实现:    
import string,re
pattern = 'abcd'
s = 'AbCd'
if re.match(pattern,s,re.I):
line = re.match(pattern,s,re.I)
print line.group()
结果;
AbCd
1.6re.compile函数
  使用re的一般步骤是先使用re.compile()函数,将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。
程序:    
import string,re
pattern = re.compile('\d+')
s = 'aabbccdd'
if pattern.match(s):
line = pattern.match(s)
print line.group()
结果:
11223344


数据分析咨询请扫描二维码

客服在线
立即咨询