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

  • 相关阅读:
    QT自定义信号和槽
    C++中深入理解dynamic_cast
    C++中rapidxml用法
    VS2015 创建C++动态库及使用
    C++ 已知两个时间(年月日)求日期差
    Electron 打开开发者工具 devtools
    NSIS安装或卸载时检查程序是否正在运行
    sqlite3 读写锁
    CEF 远程调试
    linux缩减分区空间,用以安装win系统
  • 原文地址:https://www.cnblogs.com/nklzj/p/6260130.html
Copyright © 2011-2022 走看看