在行内搜索特定的短语模式。蟒

时间:2016-01-07 06:33:47

标签: python regex search nlp match-phrase

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

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
  2. 此处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."
    2. 这里的GS是卵清蛋白(已定义),应该找到带星号的文本作为规则的正匹配 induced...to GS

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

1 个答案:

答案 0 :(得分:0)

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

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)

然后只搜索一个匹配项,将findall更改为search

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)