【问题标题】:Matching regex to set匹配正则表达式设置
【发布时间】:2013-07-09 14:09:16
【问题描述】:

我正在寻找一种将行首与正则表达式相匹配的方法,并在之后返回该行。该集合非常广泛,因此我不能简单地使用Python regular expressions matching within 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

【问题讨论】:

  • 如果您可以举一个小例子说明您要匹配的内容,那么我们可以提供帮助。
  • 您的正则表达式确实使用您的patterns 变量。正则表达式不会神奇地在您的代码中使用其他变量。

标签: python regex python-3.x set


【解决方案1】:

你做错了。

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

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

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

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

【讨论】:

    【解决方案2】:

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

    import re
    
    sss = '''dfgsdfAUGNA321354354
    !=**$=)"nNNUUG54788
    =AkjhhUUNGffdffAAGjhff1245GGAUjkjdUU
    .....cv GAUNAANNUGGA'''
    
    print re.findall('^(.+?[AGCNU]{5})',sss,re.MULTILINE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-16
      • 2016-10-21
      • 1970-01-01
      • 2017-01-03
      • 2019-03-30
      • 2011-05-01
      相关资源
      最近更新 更多