python 正则表达式(re包)

正则表达式,主要功能是从字符串中通过特定的模式,搜索想要找到的内容。


语法

import re
m = re.search('[0-9]','abcd4ef')
print (m.group(0))

re.search()接收两个参数,第一个0-9,我们要从字符串里找的是数字字符,如果第二个参数有符合

要求的字符串,就返回一个对象m,可以通过m.group()的方法找到结果,如果没有符合要求的字符,就返回None


正则表达式的函数

m = re.search(pattern, string) 搜索整个字符串,直到发现符合的字符串

m = re.match(pattern, string)  从头开始检查字符串是否符合正则表达式。必须从字符串的第一个字符开始就相符。

str=re.sub(patter,replacement,string)

str=re.sub('a','b','aaaa')
>>> str
'bbbb'


>>> a=re.split('b','abcbd')
>>> a
['a', 'c', 'd']


>>> ll=re.findall('b','bbd,df,db')
>>> ll
['b', 'b', 'b']

re.split() 根据正则分隔字符串,将分隔后的所有字符串放在一个list表中返回。

re.findall()  根据搜索的字符串,将所有的符合的字符串放在一个表里面


写一个正则表式

单个字符:

.                    任意一个字符

a|b                   字符a或字符b

[afg]                 a或f或g中的一个

[0-4]                 0-4中的一个字符

[a-f]                 a-f中的一个字符

[^m]                   不是m的一个字符

\s                     一个空格

\S                     一个非空格

\d                     [0-9]

\D                      [^0-9]

\w                      [0-9a-zA-Z]

\W                       [^0-9a-zA-Z]


重复

紧跟在单个字符之后,表示多个这样的类似字符

*   重复>=0次

+   重复>=1次

?   重复0或者1次

{m}  重复m次

{m,n} 重复m到n次,


正则表达         相符的字符串举例

[0-9]{3,5}        8988

a?b                b

a+b                aaab


位置

^               字符串的其实位置

$                字符串的结尾位置


^abcd.*C$      

>>> m=re.search("^ab.*c$","abeec")
>>> print m.group(0)
abeec


返回控制

下面一个正则表达式:

output_(\d{4})

用括号包围一个小的正则表达式,\d{4},这个小的正则表达式用于从结果中帅选信息,用括号括起来的正则表达式的一部分

称为群(group)

>>> m=re.search("output_(\d{4})","output_1986.txt")
>>> m.group(0)
'output_1986'
>>> m.group(1)
'1986'

m.group(0)整个结果,m.group(1)是第一个群

练习
有一个文件,文件名为output_1981.10.21.txt 。下面使用Python: 读取文件名中的日期时间信息,并找出这一天是周几。将文件改名为output_YYYY-MM-DD-W.txt (YYYY:四位的年,MM:两位的月份,DD:两位的日,W:一位的周几,并假设周一为一周第一天)

#!/usr/bin/env python
import re
import datetime
import os
listtest=[]
m=re.search("output_(\d{4}).(\d{2}).(\d{2}).txt","output_1981.10.21.txt")
year=int(m.group(1))
mon=int(m.group(2))
day=int(m.group(3))
d = datetime.datetime(year,mon,day)
w=str(d.weekday()+1)
print "weekly",d.weekday()
nenfile='output_'+m.group(1)+'-'+m.group(2)+'-'+m.group(3)+'-'+w+'.txt'
os.rename("output_1981.10.21.txt",nenfile)




你可能感兴趣的:(python,正则)