2016-12-07 60 views
0

我正在嘗試搜索一行中的特定模式。模式來自列表。我嘗試使用以下邏輯,但它的語法錯誤。雖然我不理解原因。有人可以解釋嗎?我在我的代碼下面列出的要求,使用循環和重複搜索模式中的變量在同一行

  1. 我需要從文件的每一行搜索模式。
  2. 模式從列表中迭代。
  3. 我想啓用模式搜索和遍歷列表中的一行Python代碼,而不是在2行。

    import re 
    cell = ['abc', 'def'] 
    line = '/* Begin cell: abc */' 
    for c in cell if re.search(r".*Begin cell.*%s.*" % c, line, re.I): 
        print 'Match' 
    

發現錯誤低於,

File "<ipython-input-47-241664c42555>", line 5 
    for c in cell (if re.search(r".*Begin cell.*%s.*" % c, line, re.I)): 
        ^SyntaxError: invalid syntax 

回答

0

語法錯誤無關,與forre.search。你不能有這樣的if:它需要是一個單獨的聲明。

for c in cell: 
    if re.search(r".*Begin cell.*%s.*" % c, line, re.I): 
     print 'Match' 
+0

你可以在列表理解中使用'[... for .... if ...]',理解或生成器表達式,這是OP可能從中選擇了這種語法的地方。它只是不允許在逐行代碼中使用。 – jez

+0

非常感謝您的澄清。這意味着我無法執行搜索操作並在同一行中有一個迭代器。問題的原因是,我有一個大型文件,我需要檢查每行與匹配的字符串列表。我知道大文件只有少數選擇性的地方匹配字符串。通過使用上面的代碼(即遍歷單元格,然後在每行上搜索),我不必要地讀取整個文件並根據模式進行交叉檢查。所以想要避免這種情況來改善運行時間。 – Sreeder

+0

這沒有任何意義。在聲明你想要做的事情和代碼實際做的事情之間,在運行時間中**沒有可能的差異**。無論發生什麼,您都需要遍歷該文件並檢查每一行是否匹配;即使語法允許您在for語句的同一行上執行它,它也不會更改運行時。 –