正则表达式:if,else if,else

时间:2010-08-12 14:41:35

标签: python regex

我正在尝试使用Python和正则表达式解析Gezel语言(http://rijndael.ece.vt.edu/gezel2/)的FSM语句

regex_cond = re.compile(r'.+((else\tif|else|if)).+')  
line2 = '@s0 else if (insreg==1) then (initx,PING,notend) -> sinitx;'
match = regex_cond.match(line2);

我有问题要区分 if else if 。示例中的 else if 被识别为 if

4 个答案:

答案 0 :(得分:3)

\ t \ t匹配制表符。看起来你在line2中的“else”和“if”之间没有制表符。您可以尝试使用\ s,它匹配任何空格字符。

答案 1 :(得分:2)

不要这样做;请改用pyparsing。你以后会感谢自己。


问题是.+贪婪,所以它正在吃掉else ...做.+?。或者更确切地说,不要,因为你现在正在使用pyparsing

regex_cond = re.compile( r'.+?(else\sif|else|if).+?' )
...
# else if

答案 2 :(得分:1)

您当前的问题是.+贪婪,因此它与@s0 else匹配,而不仅仅是@s0。要使其不贪心,请改用.+?

import re

regex_cond = re.compile(r'.+?(else\s+if|else|if).+')  
line2 = '@s0 else if (insreg==1) then (initx,PING,notend) -> sinitx;'
match = regex_cond.match(line2)
print(match.groups())
# ('else if',)

但是,正如其他人所建议的那样,使用像Pyparsing这样的解析器比使用re更好的方法。

答案 3 :(得分:0)

如果我错了,请纠正我,但RE不适合解析,因为它只适用于Type2语言。对于exaple你不能决定天气((())()))是一个没有“计数”的有效语句,正则表达式不能做。或者,谈谈你的例子,如果不能找到其他的无效。也许im mixiung up扫描仪/解析器,在这种情况下请告诉我。