【问题标题】:Python regex search pattern or string in reverse directionPython正则表达式搜索模式或反向字符串
【发布时间】:2019-09-25 07:53:20
【问题描述】:

我正在尝试挖掘特定模式的字符串数据库。我想寻找正向和反向的模式。我尝试创建两个捕获组,但是,随着模式变大,反转它并不容易,并且可能会引入错误。我考虑过创建反向序列,但是,我不确定如何将其集成到我的规则列表中:

re.findall(regex, v) or re.findall(regex, v[::-1]) 

我还想添加更多条件,例如前 10 个字母是否包含某个字母,我怎样才能做到这一点而不会使我的代码混乱?

import re
database={'key', 'MSCPFSPKQPGFGHFREPTTRSSVAKVIERNSGALIVFGGAAACVVAGWKVRGYLTDRQLSQL'}
regex = r'([A-Z]{3}[Y|W|F|I|H][A-Z]P[^YFWHI]{4}[Y|W|F|I|H][A-Z]{3})|([A-Z]{3}[Y|W|F|I|H][^YFWHI]{4}P[A-Z][Y|W|F|I|H][A-Z]{3})'

for k,v in database.items():
    rules = [re.findall(regex, v), 1 < len(v) < 200, len(re.findall(r'W',v))<4]
    if all(rules):
        print(re.findall(regex, v))
        print('%s' %k)
        print('%s' %v)
        print('%s' %len(v))
        print('\n')

【问题讨论】:

  • 为什么要反转你的字符串?模式已经反转了
  • 是的,正如我所说,我不想像这样反转模式,“随着模式变大,反转它并不容易,并且可能会引入错误”,我需要替代方案

标签: regex python-3.x bioinformatics dna-sequence


【解决方案1】:

我认为@Onyambu 所说的只是在不匹配时反转字符串并再次搜索模式。

import re
database={'key', 'MSCPFSPKQPGFGHFREPTTRSSVAKVIERNSGALIVFGGAAACVVAGWKVRGYLTDRQLSQL'}
regex = r'([A-Z]{3}[Y|W|F|I|H][A-Z]P[^YFWHI]{4}[Y|W|F|I|H][A-Z]{3})|([A-Z]{3}[Y|W|F|I|H][^YFWHI]{4}P[A-Z][Y|W|F|I|H][A-Z]{3})'

for k,v in database.items():
    rules = [re.findall(regex, v), 1 < len(v) < 200, len(re.findall(r'W',v))<4]
    if all(rules):
        print(re.findall(regex, v))
        print('%s' %k)
        print('%s' %v)
        print('%s' %len(v))
        print('\n')
    else:
        # reverse your string
        v = v[::-1]
        rules = [re.findall(regex, v), 1 < len(v) < 200, len(re.findall(r'W',v))<4]
        if all(rules):
            print(re.findall(regex, v))
            print('%s' %k)
            print('%s' %v)
            print('%s' %len(v))
            print('\n')

【讨论】:

    猜你喜欢
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多