用于提取负数的NSString正则表达式作为等式的一部分

时间:2013-02-13 20:51:31

标签: ios objective-c regex nsstring

我正在尝试使用正则表达式(在iPhone应用程序的Objective-C中)匹配数学等式,并且可以使用帮助来提出适用于下面列出的第二种情况的正则表达式。

我创建了以下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的一部分。

我试图改变正则表达式(使用我有限的正则表达式专业知识!)来排除-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 个答案:

答案 0 :(得分:1)

如果您希望避免匹配-(如果前面有数字),您可以使用

"((?<!\\d)-)?[\\d.]+[÷×][\\d.]+"

?中的((?<!\\d)-)?后跟-会使(?<!\\d)成为可选项,如果它存在,则负面后瞻[\\d.]+会阻止匹配,前提是{数字。

0-9匹配.java.util.regex一次或多次。

注意,仅使用NSRegularExpression类进行测试,但我认为"(?<!\\d)-\\d+(\\.\\d+)?" 类是相似的。

修改:

我发现很难准确理解你想要做什么,但是如果你只是试图匹配一个负数,如果它没有数字前面,你可以使用

{{1}}