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;
}
答案 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',)