在字符串中查找数字模式

Ale*_*x G 10 regex objective-c ios

我希望能够在刺痛中找到一个子串,但它有一个独特的模式,我不知道如何找到.

EX.

NSString *test1= @"Contact Names
                  67-444-322
                  Dec 21 2012
                  23941 6745 9145072 01567
                  5511 23345 614567 123456
                  Older Contacts
                  See Back Side";
Run Code Online (Sandbox Code Playgroud)

我想在子字符串中找到以下模式(这些数字但不是日期数字)

                  23941 6745 9145072 01567
                  5511 23345 614567 123456
Run Code Online (Sandbox Code Playgroud)

但是,示例字符串的格式几乎不会相同.除了"联系人姓名","旧联系人"和"查看背面"之外,每次都会有不同的号码和不同的标题.一个将保持不变的是我正在寻找的数字总是有4个数字,但可能有1行或10行.

有谁知道我会如何解决这个问题?我正在考虑的事情可能只是找到字符串中的数字,然后检查哪些数字之间有3个空格.

谢谢

Att*_*a H 5

我尝试过以下内容并且有效:

NSString *test1= @"Contact Names\n"
    "67-444-322\n"
    "Dec 21 2012\n"
    "23941 6745 9145072 01567\n"
    "5511 23345 614567 123456\n"
    "Older Contacts\n"
    "See Back Side";

NSString *pattern = @"(([0-9]+ ){3}+[0-9]+)(\\n(([0-9]+ ){3}+[0-9]+))*";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSArray *results = [regex matchesInString:test1 options:0 range:NSMakeRange(0, [test1 length])];
if ([results count] > 0) {
    NSTextCheckingResult *result = [results objectAtIndex:0];
    NSString *match = [test1 substringWithRange:result.range];
    NSLog(@"\n%@", match); // These are your numbers
}
Run Code Online (Sandbox Code Playgroud)

(如果只有一行数字,它也可以工作.)


Eph*_*era 3

您可以使用字符集来分隔字符串,然后确定每个组件中是否有 4 个数字。仅当字符串\n中包含换行符 ( ) 时,这才有效(正如您对 Lance 的回复似乎表明的那样)。

这就是我的做法:

NSString *test1= @"Contact Names\n
              67-444-322\n
              Dec 21 2012\n
              23941 6745 9145072 01567\n
              5511 23345 614567 123456\n
              Older Contacts\n
              See Back Side";

NSArray *lines = [test1 componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet];

// lines now contains each line in test1

for (NSString* line in lines) {

    NSArray *elements = [line componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet];

    if (elements.count == 4) {
        // This line contains 4 numbers
        // convert each number string into an int if needed
    }
}
Run Code Online (Sandbox Code Playgroud)

抱歉,代码行太长,Apple 的一些选择器有点长......无论如何,如果 elements 有 4 个单独的 ( NSString) 对象,那么它就是您正在寻找的行之一,您可以操作数据根据您的需要。

编辑(旁白):

关于正则表达式的主题(因为这个问题包含标签regex),是的,你可以使用正则表达式,但是 Objective-C 并没有真正有一个“好的”方法来处理它们......正则表达式更多地属于脚本语言领域以及对其有内置支持的语言。