如何在字符串中搜索关键字,然后打印该关键字后面的内容

时间:2015-04-27 14:01:40

标签: ios

我目前正在使用Tesseract使用iPhone 6相机扫描文档,然后处理识别的文本并将其放入textView。

我终于完成了工作,现在我想“检查”我发现的内容,然后使用该数据预先填充其他文本字段或标签

例如;

myTextField.text = @"name: George, age: 17, gender: male, blah blah whatever else"

现在我要搜索此文本字段并说出类似的内容:

If "substring "George:" is in string myTextField
nameLabel.text = text AFTER "George: " and BEFORE text ", age:"

我可以在我的文件中创建关键字,如“name:”和“age:”,但没有重复,但我无法保证整个文本域的长度,因为tesseract不是100%准确,因此“blah blah”部分,因为可能存在一些难以区分的文本,只要我能提取这些关键字就无关紧要

如果没有像我建议的方法,我会假设

find substring "name" and return stringPosition of

然后我可以重复“,年龄”,然后使用数字值来获得6点和13点之间的子串,仍然给我乔治。要么是好的,因为我不需要最终结果才能有效,只要它有效。

例如:

NSString * subs = @“the”;                 NSString * wholeText = tesseractText.text;

            NSRange r = [wholeText rangeOfString:subs];
            if (r.location == NSNotFound)
            {
                tesseractText.text = @"No";
            }
            else
            {
                // The string to be searched for is in the text view, r.location contains where exactly it is.
                tesseractText.text = @"Yes";
            }

即使文本的阅读/翻译出错,但如果方法“太严格”,那么它可能会崩溃,因为随机单词无法正确输入

3 个答案:

答案 0 :(得分:0)

如果你的字符串有这种模式

key: String, key: string, key: string,

比您可以尝试使用-componentsSeparatedByString:

您将获得长字符串的数组,但这可以在字典中找到

答案 1 :(得分:0)

NSRegularExpression *regexp = [NSRegularExpression 
    regularExpressionWithPattern: @"name: (.*?), age"]; 

[regexp.enumerateMatchesInString:myTextField.text 
    options:0 
    range:NSMakeRange(0, myTextField.text.length) 
    usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop)
    {
        NSRange group1 = [match rangeAtIndex:1];
        nameLabel.text = [myTextField.text substringWithRange:group1];
    }
];

答案 2 :(得分:0)

感谢Tapani,我能够构建一个解决方案,其他任何人都有类似的需求,这里是:

NSRegularExpression regexp = [NSRegularExpression regularExpressionWithPattern:@“(。?)将”选项:NSRegularExpressionCaseInsensitive error:nil];

//我使用“the”和“will”因为这是我必须提交的文件,我知道100%会阅读,我可以在以后输入正确的字段

            [regexp enumerateMatchesInString:tesseractText.text
                                     options:0
                                       range:NSMakeRange(0, tesseractText.text.length)
                                  usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop)
             {
                 NSRange group1 = [match rangeAtIndex:1];
                 myLabel.text = [tesseractText.text substringWithRange:group1];
             }
             ];