zoukankan      html  css  js  c++  java
  • REGEX例子

    作为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除了返回新的字符串之外,还会返回被替换的数目。

  • 相关阅读:
    【JavaWeb项目】一个众筹网站的开发(四)后台用户注册功能
    【JavaWeb项目】一个众筹网站的开发(三)第一个网页
    【JavaWeb项目】一个众筹网站的开发(二)架构搭建之架构测试
    【JavaWeb项目】一个众筹网站的开发(一)架构搭建
    Eclipse安装SVN插件方式简明介绍
    Struts result param详细设置
    第三次寒假作业
    寒假作业二
    我的寒假C(C++)学习计划
    1001. A+B Format (20)的解题思路以及多源代码文件的尝试编写
  • 原文地址:https://www.cnblogs.com/nklzj/p/6260130.html
Copyright © 2011-2022 走看看