我有一个正则表达式,它应该匹配我在某些文件中某些段落的开头。当我在较小版本的文件上运行它时,它可以工作,但是当我在整个文件上运行它时,它会在第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)']
如果有人知道为什么这些案件有任何不同,那将是非常有帮助的。
答案 0 :(得分:1)
您可以尝试一些基本诊断,
尝试这样的事情开始。
(?m-s)^(.{1,5}\(.*?\))
请忽略[^_]*?
,因为它表示除非必须与之匹配。
以上是不使用修饰符的情况。
(?:^|\r?\n)([^\r\n]{1,5}\([^\r\n]*?\))
或通用版
(?:^|\r?\n|\r)([^\r\n]{1,5}\([^\r\n]*?\))