2017-06-26 63 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

相关问题