转载

python正则表达式

导入模块:

import re

注意:下面的均是匹配单个字符!!!!!

1、最常见符号

| 或(匹配多个字符串),例如 bt = 'abc|ccd',正则表达式为abc ccd

. 匹配任意单个字符(换行符/n除外)

^ 匹配字符串开始

$ 匹配字符串结束

* >=0次

+ >=1次

? 0次或1次

{N} 匹配前面出现的正则表达式N次

{M,N} 匹配前面的正则表达式出现M-N次的字符串

[abc] 匹配abc的任意一个字符串

[a-zA-Z]

[^abc] 匹配除abc外的字符 (^放在外面是匹配开头,放在中括号内部是取反的意思)

() 组建组

2、特殊符号()

/d /D 匹配任意数字0-9,大写为反义,匹配任意非数字

/w /W 匹配任意数字字母0-9A-Za-z,大写为反义,匹配任意非数字非字母

/s /S 匹配任意空白符,和[/n/t/r/v/f]功能相同,大写为反义,

/b /B 匹配单词边界

/A(/Z) 匹配字符串的起始(结尾)

3、简单举例

/d{3}-/d{3}-/d{4} 美国电话号码 800-555-1212

/w+@/w+/.com 简单的xxx@yyy.com的电子邮件地址

4、re模块的使用

4-1 re.match()使用

从第一个字母开始匹配,匹配成功返回对象,失败返回None

4-2 re.search()

搜索字符串中模式首次出现的位置,而不是在起始位值匹配,严格讲,是从左到右进行搜索。

m = re.match(r'foo','seafood') 返回None

m = re.search(r'foo','seafood') 返回foo,匹配成功

注:括号内r代表原始字符串

何为原始字符串,举例说明/b既可以是原始的退格建,也是正则表达式的匹配单词,那么怎么区分呢,你可以进行转义,即//b代表正则表达式的匹配单词,但是这样的话,看起来很复杂,就出现了原始字符串,只需要r'/b'即可,即代表匹配单词

>>>m = re.match('/bblow','blow') #返回None

>>>m = re.match('//bblow','blow') #返回'blow'

>>>m = re.match(r'/bblow','blow') #返回'blow'

4-3 re.findall()

找到每一个出现的匹配部分,返回结果为一个数组

4-4 re.sub() re.subn()

匹配和替换,对匹配到的正则表达式进行替换,两者的功能相同,只是返回结果不同,sub()返回替换后的字符串,subn()返回一个元组,即第一项是替换后的字符串,第二项的替换的次数。

举例说明:

>>>re.sub(r'[ae]','X','abcdef')

'XbcdXf'

>>>re.subn(r'[ae]','X','abcdef')

('XbcdXf',2)

4-5 re.split()分割

举例说明:

#!/usr/bin/env python  from os import popen from re import split  f = popen('who','r') #who是linux下的命令 for eachLine in f: print split('/s/s+|/t',eachLine.strip()) f.close
正文到此结束
Loading...