2017-06-26 111 views
0

Perl代碼有沒有更好的方法來重新搜索一個字符串多次?

while(<file_handle>){ 
    if(/if\s+\((\w+)\)/){ 
    $op = 0x10; 
    print "This is if state!", $1; 
    }elsif(/(\d+)/){ 
    push(@number, $1); 
    print "This is pure number", $1; 
    } 
} 

這很漂亮!但在蟒蛇:

for line in lines: 
    result = re.search('/if\s+\((\w+)\)/', line) 
    if result: 
    op = int("10", 16); 
    print "This is if state!" + result.group(1) 
    else: 
    result = re.search('/(\d+)/', line) 
    if result: 
     number.append($1) 
     print result.group(1) 

有沒有更好的方式來寫在python這部分? 我知道在這種情況下,我們可以在1 if語句中使用[\ w | \ d] +。但有時我們必須使用幾種不同的if語句。

添加一些輸入文件例子:

move r1, r2; 
if (en){ 
    r3 = r5 * r6; 
} 
r10 = 0; 
for (r7 = 0; r7<10; r7++){ 
    r10 = r10 + r7; 
} 
+0

你的目標是打印出字符或數字?你能舉一個例子說明一個輸入是什麼樣的,以及預期的輸出結果? – idjaw

+0

我添加一個例子。你的意思是不管文本是什麼,搜索模式是什麼,有一種方法可以使用1 if語句? – BBKing

+1

'elsif'子句將永遠不會被輸入,因爲'\ w'包含所有'\ d'。 – ikegami

回答

-1

我會說這是不值得的麻煩就爲了兩個正則表達式模式。這裏有一個適用於足夠模式的範例,可以讓這一努力值得一提。

將正則表達式放在列表中。對於每個要檢查的字符串,通過列表比較每個字符串與列表中的每個正則表達式。

>>> import re 
>>> patterns = [r'(dog)', r'(lion)', r'(rat)', r'(cat)'] 
>>> from io import StringIO 
>>> lines = StringIO('''\ 
... dog orangutan bear cat 
... lion rat cat 
... mouse rat beast 
... sealion cow horse''') 
>>> for line in lines: 
...  print (line) 
...  for pattern in patterns: 
...   m = re.search(pattern, line) 
...   if m: 
...    print(m.groups(0)) 
... 
dog orangutan bear cat 

('dog',) 
('cat',) 
lion rat cat 

('lion',) 
('rat',) 
('cat',) 
mouse rat beast 

('rat',) 
sealion cow horse 
('lion',) 
+0

謝謝!如果我需要在不同的分支做不同的導師,我應該怎麼做? – BBKing

+0

你能解釋一下你的意思嗎? –

+0

我更新了問題。我想做像Perl一樣的東西。如果使用循環,我們必須使用「next」來匹配單詞後退出循環。 – BBKing

相關問題