模块介绍
re模块
re模块是Python中的正则表达式调用模块,在python中,通过将正则表达式内嵌集成re模块,程序员们可以直接调用来实现正则匹配。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式的大致匹配过程是:
- 依次拿出表达式和文本中的字符比较,
- 如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。
- 如果表达式中有量词或边界,这个过程会稍微有一些不同。
re模块所支持的方法有如下:
#返回pattern对象 | |
---|---|
pattern=re.compile(string[,flag]) | |
#以下为匹配所用函数 | |
1 | re.match(pattern, string[, flags]) |
2 | re.search(pattern, string[, flags]) |
3 | re.split(pattern, string[, maxsplit]) |
4 | re.findall(pattern, string[, flags]) |
5 | re.finditer(pattern, string[, flags]) |
6 | re.sub(pattern, repl, string[, count]) |
7 | re.subn(pattern, repl, string[, count]) |
其中,pattern为匹配模式,由re.compile生成,例如:pattern = re.compile(r'hello')
r'hello' 中 'r' 是python原生字符串自带的转义字符,等同于反斜杠 ''。
参数flag是匹配模式,取值可以使用按位或运算符’|’表示同时生效,如 re.I | re.M。可选值有:
- re.I(全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)
- re.M(全拼:MULTILINE): 多行模式,改变'^'和'$'的行为
- re.S(全拼:DOTALL): 点任意匹配模式,改变'.'的行为
- re.L(全拼:LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
- re.U(全拼:UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
- re.X(全拼:VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释
注:以上七个方法中的flags同样是代表匹配模式的意思,如果在pattern生成时已经指明了flags,那么在下面的方法中就不需要传入这个参数了。
1. re.match(pattern, string[, flags])
这个方法将会从string(我们要匹配的字符串)的开头开始,尝试匹配pattern,一直向后匹配,如果遇到无法匹配的字符,立即返回None,如果匹配未结束已经到达string的末尾,也会返回None。两个结果均表示匹配失败,否则匹配pattern成功,同时匹配终止,不再对string向后匹配。
2. re.search(pattern, string[, flags])
search方法与match方法极其类似,区别在于match()函数只检测re是不是在string的开始位置匹配,search()会扫描整个string查找匹配,match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回None。同样,search方法的返回对象同样match()返回对象的方法和属性。
3. re.split(pattern, string[, maxsplit])
按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。
4. re.findall(pattern, string[, flags])
搜索string,以列表形式返回全部能匹配的子串。
5. re.finditer(pattern, string[, flags])
搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。
6. re.sub(pattern, repl, string[, count])
使用repl替换string中每一个匹配的子串后返回替换后的字符串。
当repl是一个字符串时,可以使用\id或\g、\g引用分组,但不能使用编号0。
当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。
count用于指定最多替换次数,不指定时全部替换。
7. re.subn(pattern, repl, string[, count])
返回 (sub(repl, string[, count]), 替换次数)。
strip()方法
描述
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
语法
str.strip([chars])
参数
chars -- 移除字符串头尾指定的字符序列。
返回值
返回移除字符串头尾指定的字符生成的新字符串。
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
str = "123abcrunoob321"
print (str.strip( '12' )) # 字符序列为 12
以上实例输出结果如下:
3abcrunoob3
脚本正文
#!/usr/bin/python3.6
# 用途:用于统计基因组文件中每条染色体长度及N碱基的数目
# 创建人:lyr
# 创建时间: 2019/10/28
import re
input = '/PATH/GENOME.fa'
output = 'fasta_stat.txt'
dict = {}
dict2 = {}
with open(input, 'r') as read_fas:
for line in read_fas:
if line[0] == '>':
key = line.strip('[>\n]')
dict[key] = 0
dict2[key] = 0
else:
value = line.strip()
seq_len = len(value)
dict[key] += seq_len
N_sum = len(re.findall('[nN]',value))
dict2[key] += N_sum
read_fas.close()
basic_stat = open(output, 'w')
print('chr length',dict, file = basic_stat)
print('Total N(bp):',dict2, file = basic_stat)
参考
https://www.cnblogs.com/chengege/p/11190782.html
https://www.runoob.com/python/att-string-strip.html
网友评论