Objective C中减号的正则表达式

时间:2014-04-22 18:43:44

标签: objective-c regex

如果我在objective-c中有以下正则表达式:

NSString * strippedNumber = [incomingString stringByReplacingOccurrencesOfString:@"[^0-9.]"
                                                                      withString:@""
                                                                         options:NSRegularExpressionSearch
                                                                           range:NSMakeRange(0, [incomingString length])];

如何添加它以仅提取减号( - )符号?我已经用它来演示0到9的范围。

由于

麦克

1 个答案:

答案 0 :(得分:0)

对你的问题的直接回答是将-作为第一个,或者如果否定了集合表达式的第二个字符 - 在该位置它不被视为特殊。所以:

@"[-0-9.]"

匹配数字,-& .,并且:

@"[^-0-9.]"

匹配数字以外的任何内容,-& .

但是,您似乎正在尝试解析数字,如果您这样做,最好匹配可接受的格式,而不是简单地尝试删除不应该在数字中的字符。例如,使用字符串:

@"asda -123.45 tesco 1.2-3 sainsburys"

你的方法产生:

@"-123.451.2-3"

这可能不是你想要的。

您需要匹配数字的确切正则表达式取决于您接受的格式。例如,数字可能是:

  1. 可选符号:-?-零或一次(?
  2. 一个或多个数字:[0-9]+
  3. 可选的小数部分:(...)? - 无论...为零还是一次
  4. 小数部分是小数点:\\.,点是特殊的,因此必须在正则表达式(\)中进行转义,反斜杠在字符串中是特殊的,因此它也必须被转义( \
  5. 以及一个或多个数字:[0-9]+
  6. 将它们放在一起,你得到@"-?[0-9]+(\\.[0-9]+)?"来匹配一个数字。要在字符串中找到与此模式匹配的所有数字:

    NSError *error = nil;
    NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:@"-?[0-9]+(\\.[0-9]+)?" options:0 error:&error];
    NSArray *matches = [re matchesInString:incomingString options:0 range:NSMakeRange(0, incomingString.length)];
    for (NSTextCheckingResult *match in matches)
    {
        NSLog(@"match: %@", [incomingString substringWithRange:match.range]);
    }
    

    在字符串@"asda -123.45 tesco 1.2-3 sainsburys"上运行它会产生:

    match: -123.45
    match: 1.2
    match: -3
    

    您可能还希望考虑其他解析字符串的方法,例如NSScanner

    HTH