-1

我已经制定了一些我需要在文件中搜索的规则。这些规则本质上是包含未知数量单词的短语。例如,

mutant...causes(...)GS

在这里,这是一个短语,我想在我的文件中搜索。意味着这里...应该有几个词(即在这个间隙中)&(...)意味着在这个间隙中可能/可能没有单词。GS这是我知道的固定字符串变量。

基本上,我通过浏览许多此类文件来制定这些规则,它们告诉我特定文件可以满足我的要求。

问题是间隙可以有任何(少量)单词。甚至可以有一条新线从其中一个间隙开始。因此,我不能进行相同的字符串匹配。

一些示例文本 -

  1. !Series_summary "To better understand how the expression of a *mutant gene that causes ALS* can perturb the normal phenotype of astrocytes, and to identify genes that may

此处的 GS 是 ALS(已定义),并且应将加星标的文本作为规则的正匹配找到mutant...causes(...)GS

  1. !Series_overall_design "The analysis includes 9 samples of genomic DNA from isolated splenic CD11c+ dendritic cells (>95% pure) per group. The two groups are neonates born to mothers with *induced allergy to ovalbumin*, and normal control neonates. All neonates are genetically and environmentally identical, and allergen-naive."

这里的 GS 是卵清蛋白(已定义),加星标的文本应该是规则的正匹配 induced...to GS

我是python编程的初学者,所以任何帮助都会很棒!

4

1 回答 1

0

以下内容应该可以帮助您入门,它将读取您的文件并使用 Python正则表达式显示所有可能的匹配行,这将帮助您确定它匹配所有正确的行:

import re

with open('input.txt', 'r') as f_input:
    data = f_input.read()
    print re.findall(r'(mutant\s.*?\scauses.*?GS)', data, re.S)

然后只搜索一个匹配项的存在,更改findallsearch

import re

with open('input.txt', 'r') as f_input:
    data = f_input.read()
    if re.search(r'(mutant\s.*?\scauses.*?GS)', data, re.S):
        print 'found'

要对许多此类文件执行此操作,您可以按如下方式对其进行调整:

import re
import glob

for filename in glob.glob('*.*'):
    with open(filename, 'r') as f_input:
        data = f_input.read()
        if re.search(r'mutant\s.*?\scauses.*?GS', data, re.S):
            print "'{}' matches".format(filename)
于 2016-01-07T07:02:51.727 回答