2016-06-20 43 views
1

我有一个正则表达式应该匹配某些文件中的某些段落的开始。它运行在一个较小版本的文件上,但是当我在整个文件上运行它时,它会在第四场比赛中选出一个排除的\ r,我不知道为什么。正则表达式返回不一致的结果在同一个字符串

继承人的方法:

def getRowTitles(self): 
      rowNames = [] 
      pattern = r'([^\r].{1,4}\(.*?\)[^_]*?)' 
      count = 0 
      found = re.search(pattern, self.read) 
      toLoopThrough = self.read 
      while found: 
       rowNames.append(found.group().strip()) 
       count = toLoopThrough.find(found.group()) 
       toLoopThrough = toLoopThrough[count + len(found.group()):] 
       found = re.search(pattern, toLoopThrough) 
      return rowNames 

的文件的开头是这样的:

  Average per group  sum per group  n per group  stdev per group  Log 2 p-value Individual Areas normalised by weight         
      WT OX WT OX WT OX WT OX OX/WT  WT    OX     

脂质极性@保留时间等级Class子类C1378 C1383 C1387 C1513 C1377 C1381 C1382 C1389 C1397 C1519 具有p值的脂质< 0.05
心磷脂
CL(23:4/24:1/20:3/18:1)[email protected] CL Ca rdiolipin Cardiolipin 58259.7396 108709.9208 233038.9584 652259.5249 4 6 29064.41359 19088.852 0.899912448 0.030160222 3.56E + 04 9.88E + 04 5.99E + 04 3.88E + 04 9.92E + 04 1.18E + 05 1.14E + 05 1.31E + 05 7.55E + 04 1.15E 05 鞘糖脂
神经酰胺(D18:2/22:1)神经酰胺[email protected]鞘糖脂神经酰胺73771.99705 172457.0264 295087.9882 1034742.159 4 6 23692.94535 68679.54864 1.225091714 0.015442582 7.77E + 04 7.05E + 04 4.47E + 04 1.02E + 05 1.49E +05 3.01E + 05 1.85E + 05 1.04E + 05 1.35E + 05 1.60E + 05 中性甘油脂
DG(16:0/22:6)[email protected] DG中性甘油脂甘油二酯1970578.151 620552.4835 7882312.604 3723314.901 4 6 642432.36 508282.8967 -1.666993829 0.01447318 1.53E + 06 1.69E + 06 2.92E + 06 1.74E + 06 1.18E + 06 3.25E + 05 1.03E + 06 1.53E + 05 1.01E + 06 2.57E + 04 TG(16: 1/16:1/18:2)[email protected] TG N中性甘油脂甘油三酯205875394.4 129414602.1 823501577.5 776487612.3 4 6 21098256.62 66163733.32 -0.669771005 0.036476709 2.03E + 08 1.84E + 08 2.35E + 08 2.02E + 08 1.69E + 08 1.26E + 08 1.72E + 08 1.33E + 08 1.75E + 08 1.36E + 06

如果文件的长度只与该摘录一样长,则该方法返回一个类似['CL(23:4/24:1/20:3/18:1)','' Cer(d18:2/22:1)','DG(16:0/22:6)','TG(16:1/16:1/18:2)'],但是如果文件更长(23:4/24:1/20:3/18:1)','Cer(d18:2/22:1)','DG(16:0/22:6) )','04 \ rTG(16:1/16:1/18:2)']

如果有人知道为什么这些情况会有所不同,那将会非常有帮助。

+0

请使用格式化工具在编辑器中,使您的问题更具可读性。较低的部分是全明文,并且很难确定输入文件的哪些部分以及哪些部分是终端输出。谢谢! –

+1

垃圾进入,垃​​圾出来;可能是因为可能的文件最有可能重复了'\ r',无论哪种方式,这不是任何人都可以解决的。一个像Sublime Text 3(不是notepad.exe)的文本编辑器可以显示*不可见*字符。 –

+0

表达式末尾的这个'[^ _] *?'永远不会匹配任何东西。即使它可以,它也会匹配所有的线路。 – sln

回答

1

你可以尝试一些基本的诊断,

尝试这样的事情开始。

(?m-s)^(.{1,5}\(.*?\))

漏下[^_]*?因为它说,除非它有不匹配任何东西。

以上是不使用修饰符。

(?:^|\r?\n)([^\r\n]{1,5}\([^\r\n]*?\))

,或者通用版本

(?:^|\r?\n|\r)([^\r\n]{1,5}\([^\r\n]*?\))

+0

谢谢,你的最后一个建议完美的工作! –

+0

@JonahNeugeboren - 太棒了!如果它适合你,考虑接受(检查)和upvoting。 – sln

相关问题