[英]How to print line of a file after match an exact string pattern with python?
我有一個清單
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的子串嗎? ,因此正則表達式解析器與plutino的第一部分匹配? 並返回非虛假答案。 無需進行大量額外工作,您應該能夠使用re.search(i, line+r'\\s')
來解決此問題,這表明您需要在搜索的短語后面留一個空格字符。 隨着文件變得越來越長,越來越復雜,您可能會遇到更多此類異常,以使正則表達式表現出所需的行為。
更新:由於這樣的原因,我也喜歡可視化正則表達式編輯器 。 它們使查看哪些匹配項和哪些不匹配項變得容易。
另一個選擇是類似i==line.split('|')[2].strip()
,它會提取您似乎在意的文件部分。 .strip()
方法在長行上可能會變得效率低下,但這可能適合您的用例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.