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

2024-04-26 21:47:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个regex表达式,它应该匹配一些文件中某些段落的开头。当我在文件的较小版本上运行它时,它会起作用,但是当我在整个文件上运行它时,它会在第4个匹配项上选择一个被排除的\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                  

脂质极性@保留时间类别C1378 C1383 C1387 C1513 C1377 C1381 C1382 C1389 C1397 C1519 p值为<;0.05的脂质
心磷脂
CL(23:4/24:1/20:3/18:1)_邮箱:NEG@43.978CL心磷脂心磷脂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.079Cer鞘糖脂神经酰胺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)_邮箱:45.696DG中性甘油脂二甘油三酯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 甘油三酯(16:1/16:1/18:2)_邮箱:52.725甘油三酯中性甘油脂甘油三酯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/18:2)']

如果有人知道这些案子有什么不同,那会非常有帮助。你知道吗


Tags: 文件selfclcountgrouppatternox邮箱
1条回答
网友
1楼 · 发布于 2024-04-26 21:47:28

你可以试试基本的诊断方法

试着这样开始。你知道吗

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

省去[^_]*?,因为它说除非必须匹配,否则不要匹配任何东西。你知道吗

这里是上面没有使用修饰语。你知道吗

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

或者,通用版本

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

相关问题 更多 >