簡體   English   中英

在使用python匹配確切的字符串模式后如何打印文件的行?

[英]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之外的所有元素都適用。 當變量iplutino時 ,代碼將為plutinoplutino打印行

發生這種情況是因為plutinoplutino的子串嗎? ,因此正則表達式解析器與plutino的第一部分匹配 並返回非虛假答案。 無需進行大量額外工作,您應該能夠使用re.search(i, line+r'\\s')來解決此問題,這表明您需要在搜索的短語后面留一個空格字符。 隨着文件變得越來越長,越來越復雜,您可能會遇到更多此類異常,以使正則表達式表現出所需的行為。

更新:由於這樣的原因,我也喜歡可視化正則表達式編輯器 它們使查看哪些匹配項和哪些不匹配項變得容易。

另一個選擇是類似i==line.split('|')[2].strip() ,它會提取您似乎在意的文件部分。 .strip()方法在長行上可能會變得效率低下,但這可能適合您的用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM