Я пытаюсь сопоставить математическое уравнение с использованием регулярного выражения (в Objective-C в приложении iPhone) и может использовать помощь при создании регулярного выражения, которое работает для второй сценарий, указанный ниже.Регулярное выражение NSString для извлечения отрицательных чисел как часть уравнения
Я создал следующий код Objective-C, чтобы извлечь уравнение формы (1÷4)
или (-1÷4)
, если перед продуктом или разделителем есть отрицательное число: (я включаю это здесь, чтобы помочь объяснить вопрос, который я пытаюсь ответить)
NSString* equation = @"1+(-1÷4)";
NSString* matcher = @"(-){0,1}(\\.|\\d)+(÷|×){1,}";
NSRegularExpression *equation_regex = [NSRegularExpression regularExpressionWithPattern:matcher options:NSRegularExpressionCaseInsensitive error:nil];
while([equation_regex numberOfMatchesInString:working_function options:0 range:NSMakeRange(0, [equation length])])
{
// regex finds '-1÷4'
}
Однако, это распадается в течение следующего уравнения: 3-1 ÷ 4, где -1 не должны быть извлечены, так как это не входит в 1 ÷ 4 в уравнении.
Я попытался изменить регулярное выражение exlucde -1 IFF есть несколько впереди из - через следующее (с моим ограниченным опытом регулярных выражений!):
NSString* equation = @"3-1÷4";
NSString* matcher = @"((^\\d)(-)){0,1}(\\.|\\d)+(÷|×){1,}";
NSRegularExpression *power_regex = [NSRegularExpression regularExpressionWithPattern:power_regex_pattern options:NSRegularExpressionCaseInsensitive error:nil];
while([power_regex numberOfMatchesInString:working_function options:0 range:NSMakeRange(0, [working_function length])])
{
}
Если регулярное выражение ((^\\d)(-)){0,1}
это мой попытайтесь только совместить отрицательную часть, если нет ведущей цифры на - (т.е. 1÷4
, а не -1÷4
), которая не работает, следовательно, вопрос. Надеюсь, я объяснил это достаточно! Заранее спасибо.
Мне просто интересно, почему вы не расширили формулу нулевым числом, когда вы обнаруживаете сиротского оператора '', прежде чем вы начнете работать, то есть '1 + (- 1 ÷ 4)' становится '1+ (0-1 ÷ 4)' и '3-1 ÷ 4' становится' 3-1 ÷ 4' (что то же самое), и у вас не будет проблемы с созданием общего регулярного выражения, и конечным результатом должно быть s ame, потому что начальный ноль не изменит формулу. – holex
На самом деле, @holex, ваше предложение приводит к дальнейшему мышлению и настройке моего кода, который решает -1 ÷ 4, который был только оборудован для управления ** числом, продуктом, номером **. Я изменил его, чтобы справиться с ** продуктом, номером, продуктом, номером **. Это решает проблему, но как мне закрыть этот вопрос? Я рад держать его открытым, если кто-то может решить исходное регулярное выражение Q, которое все еще будет полезно, и обсудить решение, которое может быть полезно для потомков? –