0

我正在寻找一种将行的开头与正则表达式匹配并在之后返回该行的方法。该集合非常广泛,因此为什么我不能简单地使用Python 正则表达式匹配中给出的方法 set。我也想知道正则表达式是否是最好的解决方案。我已经阅读了http://docs.python.org/3.3/library/re.html唉,它似乎没有答案。这是我到目前为止所尝试的......

import re
import os
import itertools

f2 = open(file_path)

unilist = []

bases=['A','G','C','N','U']

patterns= set(''.join(per) for per in itertools.product(bases, repeat=5))

#stuff

if re.match(r'.*?(?:patterns)', line):
    print(line)
    unilist.append(next(f2).strip())
    print (unilist)

你看,问题是我不知道如何引用我的集合......

我试图将其匹配的文件如下所示:

@SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50 TTGCCTGCCTATCATTTTAGTGCCTGTGAGGTGGAGATGTGAGGATCAGT

+

hhhhhhhhhhghhghhhhhfhhhhhfffffeee[X]b[d[ed`[Y[^Y
4

2 回答 2

2

你正在以错误的方式去做。

您只需将字符集留给正则表达式:

re.search('[AGCNU]{5}', line)

匹配由这 5 个字符构建的任何 5 个字符的模式;匹配您使用 set 行生成的相同 3125 种不同组合,但不需要预先构建所有可能的组合。

否则,您的正则表达式尝试与您的patterns变量无关,该模式r'.*?(?:patterns)'将匹配 0 个或多个任意字符,然后是文字 text 'patterns'

于 2013-07-09T14:14:30.417 回答
0

根据我从您的问题中了解到的情况,在我看来这可以满足您的需求:

import re

sss = '''dfgsdfAUGNA321354354
!=**$=)"nNNUUG54788
=AkjhhUUNGffdffAAGjhff1245GGAUjkjdUU
.....cv GAUNAANNUGGA'''

print re.findall('^(.+?[AGCNU]{5})',sss,re.MULTILINE)
于 2013-07-09T14:26:57.233 回答