我已经制定了一些我需要在文件中搜索的规则。这些规则本质上是具有未知数量的单词的短语。例如,
mutant...causes(...)GS
这是一个短语,我想在我的文件中搜索。 ...
意味着应该在这里说几句话(即在这个空白中)& (...)
表示此差距中可能存在/可能没有字词。 GS
这是我知道的固定字符串变量。
基本上我通过浏览许多这样的文件制定了这些规则,他们告诉我一个特定的文件可以满足我的要求。
问题在于差距可能有任何(小)字数。甚至可以在其中一个缺口中开始一条新线。因此,我无法进行相同的字符串匹配。
一些示例文本 -
!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
!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编程的初学者,所以任何帮助都会很棒!!
答案 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)