正则表达式在同一个字符串上返回不一致的结果

时间:2016-06-20 18:32:14

标签: python regex

我有一个正则表达式,它应该匹配我在某些文件中某些段落的开头。当我在较小版本的文件上运行它时,它可以工作,但是当我在整个文件上运行它时,它会在第4场比赛中选择一个排除的\ r \ n,我不知道为什么。

继承人的方法:

    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                  

脂质极性@保留时间类别类别子类C1378 C1383 C1387 C1513 C1377 C1381 C1382 C1389 C1397 C1519 p值<0.05的脂质 心磷脂
CL(23:4/24:1/20:3/18:1)_NEG@43.978 CL Cardiolipin 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 糖脂
Cer(d18:2/22:1)_NEG@45.079 Cer Glycosphingolipids Ceramides 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)_POS@45.696 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)_POS@52.725 TG中性甘油脂甘油三酯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)'],但是如果文件较长则会混淆并给我['CL(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)']

如果有人知道为什么这些案件有任何不同,那将是非常有帮助的。

1 个答案:

答案 0 :(得分:1)

您可以尝试一些基本诊断,

尝试这样的事情开始。

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

请忽略[^_]*?,因为它表示除非必须与之匹配。

以上是不使用修饰符的情况。

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

或通用版

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