首页 文章

如何删除末尾带有不同数字的字符串

提问于
浏览
2

我试图删除一个以SRR开头的字符串,并以'length =不同长度的不同数字'结束 . 我所知道的这个数字是1到200之间......

我不知道怎么做,也不知道哪种方式最有效率 . 我在操作大文件(> 10GB) .

我想为要测试的1到200的所有值做一个循环:

import os
import re
f2 = open(r'path')
num = 0
while num < 200:
    num = num+1
    ident2 = re.compile('SRR.*?%d' %num, re.DOTALL)
    stuff = f2.read()
    for line in f2:
        ident2.sub('',stuff)

代码总体上要长得多,但是我确实在最后编写并关闭了东西 . 我只是想知道我是否可以使用一个表达式来考虑每个数字并删除字符串...

任何建议和建设性的批评将不胜感激 .

我正在添加文本输入的示例:

@SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50TTGCCTGCCTATCATTTTAGTGCCTGTGAGGTGGAGATGTGAGGATCAGT+SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50hhhhhhhhhhghhghhhhhfhhhhhfffffe`ee[`X]b[d[ed`[Y[^Y

这是一行,我有许多类似序列的重复 .

1 回答

  • 2

    只是匹配数字:

    re.compile('SRR.*?\d{1,3}', re.DOTALL)
    

    \d 匹配字符0-9, {1,3} 匹配1到3之间 .

    如果您不想匹配以 SRR 开头,然后跟随高于200的数字的任何内容,您可以创建一个更挑剔的表达式:

    re.compile('SRR.*?(?:[1-9]|[1-9]\d|1\d{2}|200)', re.DOTALL)
    

    匹配1到9之间的一位数字,或10到99之间的2位数字,或100到199之间的3位数字或数字200 .

    这些表达式都不会阻止匹配后跟更多数字 . 您可能需要将 \b 边界锚添加到表达式的末尾:

    re.compile('SRR.*?\d{1,3}\b', re.DOTALL)
    

    对于您发布的示例,我明确包含 length= 参数:

    re.compile('SRR.*?length=(?:[1-9]|[1-9]\d|1\d{2}|200)', re.DOTALL)
    

相关问题