有没有更好的方法来多次重新搜索字符串?

时间:2017-06-26 02:45:23

标签: python perl search

Perl Code

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;
  }
}

这很漂亮!但是在python中:

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;
}

1 个答案:

答案 0 :(得分:-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',)