python正则表达式

python正则表达式re模块

 

打文本中搜索某个字段

python有个库 re

 

import re

 

正则表达式 . 点表示任意的字符

[a-z] 这个位置一定是个小写a到z的字母

print(lent(result))

 

打文本中搜索某个字段

python有个库 re

import re

 

正则表达式 . 点表示任意的字符

[a-z] 这个位置一定是个小写a到z的字母

print(lent(result))

#!/usr/bin/python
import re

text=''
file = open('shi.txt')
for line in file:
text=text+line
file.close()

result = re.findall('a[z-z][a-z]',text)

print(result)

  

result = re.findall(' (a.[a-z]) ',text) # 加上() 表示要括号里面的那些 其他的都不要

这样左右两边的空格都去掉了

 

 

去掉重复的结果方法:

result = re.findall(' (a.[a-z]) ',text)

result = set(result)

print(result)

 

上面的都是a开头的

大写的呢:[Aa] 表示第一个字母可以是大写的A也可以是小写的字母a

 

*可以匹配一个 多个或者没有

a* :

a

aa

aaaaaaaaaaaaaaaa

空格*

可以匹配很多个空格 ‘ *’可以有空格 可以有无数个空格

 

 

result = re.findall(' *([Aa].[a-z]) ',text)

竟然匹配除了 safe 的afe 原因:

afe前面没有空格 后面有空格

解决: 分两段过滤

result = re.findall(' *([Aa].[a-z]) |([A].[a-z]) ',text)

结果分两段 一对一对的

 

看代码:

两个括号 第一个括号没有匹配到的话 就用个空来表示 同理右边

*可以匹配一个 多个或者没有
a* :
空
a
aa
aaaaaaaaaaaaaaaa
空格*
可以匹配很多个空格 ‘ *’可以有空格 可以有无数个空格


result = re.findall(' *([Aa].[a-z]) ',text) 
竟然匹配除了 safe 的afe 原因:
afe前面没有空格 后面有空格
解决: 分两段过滤
result = re.findall(' *([Aa].[a-z]) |([A].[a-z]) ',text)
结果分两段 一对一对的
 
看代码:
两个括号 第一个括号没有匹配到的话 就用个空来表示 同理右边

  

#!/usr/bin/python
import re

text=''
file = open('shi.txt')
for line in file:
text=text+line
file.close()

result = re.findall(' *([Aa].[a-z]) |([A].[a-z]) ',text)

final_result = set() #set()是个集合 
for pair in result:
if pair[0] not in final_result:
final_result.add(pair[0]) #左边规则对应出来的叫pair[0]
if pair[1] not in final_result:
final_result.add(pair[1]) #右边规则对应出来的叫pair[1]
final_result.remove('')
print(final_result)

 

稍微总结一下:

.点 表示此位置有一个字符 任意的一个字符

 

\d 必须是一个数字

\d+ 至少有一个数字

(区别 a* 可以匹配到空)

用一下:

#!/usr/bin/python
import re


text=''
file=open('shi.txt')
for line in file:
text = text+line
file.close()

result = re.findall('\d+',text)
print (result)

  

\d{2} 刚好匹配到两个

\d{2,3}可以匹配到两到三个

\w 匹配一个字母 ‘A-Za-z’

\w{2,3}匹配两个或者三个字母

 

以为某个字符开头的

f=open('imooc.txt')

for line in f:
if line.startswith('imooc'):
print line

以某个字符开头和结尾的语句
#!/usr/bin/python
import re

def find_start_imooc(fname):
f=open(fname)
for line in f:
if line.startswith('mooc'):
print line

#find_start_imooc('imooc.txt')

def find_in_mooc(fname):
f=open(fname)
for line in f:
if line.startswith('imooc')\
and line.endswith('imooc\n '): #每一行结束都有/n
print line
find_in_mooc('imooc.txt')


#!/usr/bin/python
import re

def find_start_imooc(fname):
f=open(fname)
for line in f:
if line.startswith('mooc'):
print line

#find_start_imooc('imooc.txt')

def find_in_mooc(fname):
f=open(fname)
for line in f:
if line.startswith('imooc')
and line[:-1].endswith('imooc'): #切片操作
print line
find_in_mooc('imooc.txt')

  

匹配一下划线和字母开头的变量名

 

s3='1 dsf se'

s3.split() 返回切分好的

 

res = r't[io]p'

方括号里加^ 表示不包含 res = r't[^io]p'

 

^尖角号 用于行首 r"^hello" 只匹配 行首是 hello的

$ 尾部 r"hello$" 只匹配行尾的

"t[abc$]" 以a或b或c结尾 肯定不是这样的

就像在[^abc]中 ^表示除了abc

 

\d 十进制 [0-9]

\D 非数字字符 [^0-9]

\s 任何空白字符 [\t\n\r\f\v]

\S非空白字符 [^\t\n\r\f\v]

\w任何字母数字 [a-zA-Z0-9]

\W非字母数字 [^a-zA-Z0-9]

 

010_12345656

 

r=r"^010-\d{8}" 重复八次前面的规则 A{8} A重复8次

 

*

r=r"ab*" 0次至多次(一次也不出现)

 

+ 匹配一次或者多次 至少一次 与* 有区别

 

? 表示可有可无

 

贪婪匹配 跟 非贪婪匹配

r=r"ab+? " 这样以最少的匹配出来了 不会出现abbbbbbbb

 

{ } 关于花括号 {m,n}至少重复m次 至多重复n次

r=r"a{1,3}"

 

 

match() 返回一个对象 如果匹配上了的话

 

csvt_re = re.compile(r'csvt', re.I)

csvt_re.match('csvt hello')

searcht() 不管在哪里 都能匹配 没有就不匹配了

finditer 返回迭代器对象

re=r'c..t'

re.sub(rs,'python','csvt scat ')

 

re.split(r'[\+\-\*]',s)

 

 

 

posted @ 2017-09-14 22:29  toov5  阅读(265)  评论(0编辑  收藏  举报