2014-11-21 4 views
0
s = '>50&<100' 
s2 = '>30' 
s3 = '<30' 
s4 = '=10' 
s5 = '!=10' 
s6 = '>2|<5' 

так что мои строки должны быть:питон разбора строки с правилами

  • оператор сравнения (! <> =) затем целое значение -> мы называем его ЭКСПРЕССИЯ

  • опциональный логический оператор (| &) , за которым следует ЭКСПРЕССИЯ

Каков наилучший способ:

a. проверьте входную строку b проанализируйте ее, чтобы я мог создать выражение в действительном python

P.S Я могу решить проблему с регулярным выражением. Я думал о создании грамматики и разбирал ее с деревом.

ответ

1

вы можете создать вам regex следуя, и, как говорится в комментарии, если вы хотите, общее решение вам нужно это шаблоны:

s = '>\d+&<\d+' 
s2 = '>\d+' 
s3 = '<\d+' 
s4 = '=\d+' 
s5 = '!=\d+' 
s6 = '>\d+|<\d+' 

string_list=[s,s2,s3,s4,s5,s6] 
rx = re.compile('|'.join(map(re.escape, string_list))) 

, а затем использовать правильную re функцию (например: rx.match(string))!

re.escape (строка) Вернутся строка всех не буквенно-цифровых символов управляющими последовательностями; это полезно, если вы хотите совместить произвольную литеральную строку, которая может содержать метасимволы регулярного выражения.

+0

Привычка это соответствует только точные примеры он дал, а не применять общие правила, которые он хочет использовать? –

+0

Да, спасибо за напоминание, я отредактирую ответ! – Kasramvd

Смежные вопросы