我有一张单子
list = ['plutino?','res 2:11','Uranus L4','res 9:19','damocloid','cubewano?','plutino']
我想用下一种格式搜索文件中列表中的每个元素,并在匹配后打印行
1995QY9 | 1995_QY9 | plutino | 32929 | | 39.445 | 0.260 | 29.193 | 49.696 | 4.8 | 66 | # 0.400 | 1.21 BR-U | ?
1997CU29 | 1997_CU29 | cubewano | 33001 | | 43.534 | 0.039 | 41.815 | 45.253 | 1.5 | 243 | | 1.82 RR |
1998BU48 | 1998_BU48 | Centaur | 33128 | | 33.363 | 0.381 | 20.647 | 46.078 | 14.2 | 213 | # 0.052 | 1.59 RR | ?
1998VG44 | 1998_VG44 | plutino | 33340 | | 39.170 | 0.250 | 29.367 | 48.974 | 3.0 | 398 | # 0.028 | 1.51 IR |
1998SN165 | 1998_SN165 | inner classic | 35671 | | 37.742 | 0.041 | 36.189 | 39.295 | 4.6 | 393 | # 0.060 | 1.13 BB |
2000VU2 | 2000_VU2 | unusual | 37117 | Narcissus | 6.878 | 0.554 | 3.071 | 10.685 | 13.8 | 11 | # 0.088 | |
1999HX11 | 1999_HX11 | plutino? | 38083 | Rhadamanthus | 39.220 | 0.151 | 33.295 | 45.144 | 12.7 | 168 | | 1.18 BR |
1999HB12 | 1999_HB12 | res 2:5 | 38084 | | 56.376 | 0.422 | 32.566 | 80.187 | 13.1 | 176 | | 1.39 BR-IR |
我正在使用下一个代码来实现这一点
for i in list:
with open("tnolist.txt") as f:
for line in f:
if re.search(i, line):
print(line)
该代码适用于所有元素,除了plutino。当变量i为plutino时,代码打印plutino和plutino的行?。你知道吗
这是因为plutino是plutino的子串?,那么regex解析器匹配plutino的第一部分?并返回非错误答案。不需要做大量的额外工作,您应该能够用
re.search(i, line+r'\s')
解决这个问题,这意味着您需要在搜索的短语后面有一个空格字符。随着文件变得越来越长、越来越复杂,您可能会有更多这样的异常,以使regex按需要运行。你知道吗更新:出于这样的原因,我也喜欢visual regex editors。它们使我们很容易看到什么匹配什么不匹配
另一种选择是
i==line.split('|')[2].strip()
,它提取您似乎关心的文件部分。.strip()
方法在长线上可能会变得低效,但这可能适合您的用例。你知道吗相关问题 更多 >
编程相关推荐