码迷,mamicode.com
首页 > 其他好文 > 详细

REGEX例子

时间:2017-01-07 20:45:11      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:实现   函数   显示   arch   计算   name   print   counter   令行   

作为REGEX的例子,代码9.3显示了一个给定的文件有多少行,具有给定的模式,通过命令行输入(注:有更有效率的方式来实现这个功能,如Unix下的grep命令,在这里只是给出了另一种方式)。这个程序像下面这样执行:

program_name.py file_name pattern

这里file_name是文件的名字,pattern是需要查找的模式:

列表9.3:计算多少行包含有一个用户给定的模式
1 import re,sys
2 rgx = re.compile(sys.argv[2])
3 counter = 0
4 with open(sys.argv[1]) as fh :
5 for line in fh:
6 if rgx.search(line):
7 counter += 1
8 print (counter)

这个脚本没有记录有多少模式的单词在文件中出现。如果一个单词在同一行中出现多于一次,它只记为一次。下面的脚本对给定模式所有出现进行计数:

1 import re, sys
2 rgx = re.compile(sys.argv[2])
3 counter = 0
4 with open(sys.argv[1]) as fh:
5     for line in fh:
6         ####这一句要不要都行"if rgx.findall(line):"
7         counter += len(rgx.findall(line))
8             
9 print (counter)

 

re.sub

sub(rpl,str[,count=0]): 把rpl替换为字符串(str)来与它定义的REGEX一致。第三个参数是可选的,表示我们想要替代多少次,而默认值是零,这意味着,它取代了所有的出现。这与字符串的replace方法是非常相似,只是后者更换为另一个文本,而不是替换位于一个REGEX的文字。

列表 9.5 删除GC重复(多余三个GC的行)
1 import re
2 rgx = re.compile("(?:GC){3,}")
3 seq = "ATGATCGTACTGCGCGCTTCATGTGATGCGCGCGCGCAGACTATAAG"
4 print ("Before:%s" %seq)
5 print ("After: %s" %rgx.sub("",seq))   ####这里 rgx.sub("",seq) 会自动返回被替换后的新字符串。

这个程序的产物是

Before: ATGATCGTACTGCGCGCTTCATGTGATGCGCGCGCGCAGACTATAAG

After: ATGATCGTACTTTCATGTGATAGACTATAAG

re.subn

subn(rpl,str[,count=0]): 它具有和sub相同的功能,唯一不同是不返回新的字符串,而是返回一个元组,有两个元素:新的字符串和替代数目。当除了替换字符串中的一个模式,还需要知道多少替换已作出时使用此函数。

re.sub和re.subn的区别如下:

>>> seq
‘ATATAAGATGCGCGCGCTTATGCGCGCA‘

>>> regex = re.compile("(?:GC){3,}")
>>> regex.subn("",seq)
(‘ATATAAGATTTATA‘, 2)

>>> regex.sub("",seq)
‘ATATAAGATTTATA‘

就是说re.subn除了返回新的字符串之外,还会返回被替换的数目。

 

REGEX例子

标签:实现   函数   显示   arch   计算   name   print   counter   令行   

原文地址:http://www.cnblogs.com/nklzj/p/6260130.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!