2012-08-28 74 views

回答

4

確切的翻譯是:

node_pattern = re.compile("^\*NODE", re.I) 
element_pattern = re.compile("^\*ELEMENT OUTPUT", re.I) 

if (not re.search(node_pattern, line) or not re.search(element_pattern, line)): 
    print line 

根據你正在嘗試做的or在中間可能會更好作爲and但我不能s不知道更多關於整個問題。希望這可以幫助!

0

在Python中有更好的方式來做到這一點則正則表達式:

if not line.lower().startswith ('*node') or not line.lower().startswith ('*element output'): 
    print (line) 
0

在我看來,原來的邏輯是錯誤的。我猜想打算只打印不開始的行或*NODE*ELEMENT OUTPUT(不區分大小寫)。但是,任何線條都適用。如果它以*NODE開頭,那麼它不會以*ELEMENT OUTPUT開頭,反之亦然。這樣,條件總是評估爲True

結論是,即使在原文中,也必須有and而不是or

而且,您必須使用原始的字符串(如r'your pattern'在Python或者你有加倍反引號,我相信,你不希望在正則表達式使用雙反斜槓

你可以試試下面的代碼片段:。

import re 

simulated_file_content = [ 
    'line 1\n', 
    '*NODE line 2\n', 
    'line 3\n', 
    '*eLeMent Output line 4\n', 
    'line 5\n', 
    ] 


rex = re.compile(r'^\*(NODE)|(ELEMENT OUTPUT)', re.IGNORECASE) 


for line in simulated_file_content: 
    line = line.rstrip() 
    if not rex.search(line): 
     print line 

它顯示:

c:\tmp\___python\FaisalSashmi\so12153650>python a.py 
line 1 
line 3 
line 5 
相關問題