2016-06-20 41 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

相關問題