我有一个非常糟糕的文件,但我能够解析它并提取除了一个所需的大部分值。我需要你帮助你如何使用正则表达式来提取可变长度的数字。
要解析和提取其他功能,我使用了List索引以及不同的spliiters'|',''和':'。但在这种情况下,我能够达到阻止(下方)并且必须为每一行提取“_”周围的数字,分别为x和y。
一种方法可能是首先按':'而不是''和最后按' - '分开,但提取索引位置[0]和[1]但这将是最有效的方法
chr5:17399789-17401949 REVERSE
chr5:6414488-6415907 FORWARD
chr5:2981156-2982709 FORWARD
chr5:6311725-6313323 REVERSE
chr5:12791432-12794551 REVERSE
chr5:927915-930781 FORWARD
chr5:19585936-19587841 FORWARD
chr5:26894856-26896488 FORWARD
chr5:18138775-18142147 REVERSE
chr5:20537525-20538943 REVERSE
chr5:22496196-22500543 REVERSE
chr5:4747860-4753592 REVERSE
以上街区来自“更大街区”,如下所示:
AT1G09410.1 |符号:|含有pentatricopeptide(PPR)重复序列的蛋白质chr1:3035443-3037560 FORWARD
我可以在“更大的区块”中提取吗?
我的编程水平可以最好地描述为初学者,需要你帮助。
由于
AK
答案 0 :(得分:3)
一种方法是将正则表达式定义为以下Python“raw”字符串:
numericalBlockRegEx = r'chr\d+:(?P<firstNumBlock>\d+)-(?P<secondNumBlock>\d+)'
最后,一旦你在文件的每一行上实际运行正则表达式(你可能需要使用对search的调用而不是匹配),你可以提取你感兴趣的数字块。一个简单的电话:
x = match.group('firstNumBlock') #Gets first number block matched
y = match.group('secondNumBlock') #Gets second number block matched
干杯!