2015-04-28 17 views
1

我有一個大的不一致的文本塊(我正在測試使用OCR和隨機打印輸出,但是我的最終代碼將使用駕駛執照或其他形式的ID)如何搜索文本字段並提取關鍵字後的所有內容直到行尾「/ n」

我想搜索關鍵字如「名稱」或「1)」的文本,然後提取所有關鍵字後的所有內容,直到我到達中斷點或行結束。

我目前正在使用:

NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"name: (.*?) Smith" options:NSRegularExpressionCaseInsensitive error:nil]; 

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

解壓時只是第一個名稱(例如,喬治),但是當我試圖讓「史密斯」我試圖

NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"name: (.*?) /n" 

這工作和

NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"name: (.*?) " 

但既不工作:(

我之所以使用OCR,是因爲相機不會總是抓住「所有東西」,而且因爲典型的ID將每條信息放在一個新的行中,所以我沒有一個「關鍵」來捕獲文本,所以我要麼需要在關鍵字「name:」之後得到文本「直到行尾」或新段落,或者不是最優的文字,它不會考慮變化的名稱長度,但是至少它會在一定程度上起作用。

如果在名稱後面使用固定數量的字符:爲避免出現界限,我可能需要對一行中的字符進行計數,但同樣,因爲這是一個文本字段而不是一行標籤,我需要計算「只是」該行中的字符,而不是下一個字符。

如果我使用的代碼可以進行調整那將會是巨大的,但如果有使用Objective C的一個完全不同的方法,那麼我願意重寫什麼我迄今所做獲得此功能工作

感謝您的時間

+0

您能否提供一個您嘗試使用此正則表達式解析的字符串示例? –

+1

你真的使用過'/ n'(正斜槓,n)嗎?這不是一個換行符。你大概意思是'\ n'(反斜線,n)。或者,您可以從正則表達式中刪除問號。這使得'*'非貪婪。如果你允許它是貪婪的,它會把所有的東西拿到換行符或者字符串尾部。 –

+0

讓我檢查一下,我可能使用/而不是\,我會看看是否可行 @PaulPatterson我測試的字符串是 「... tions和概念驗證 ...t數字,將有三個團隊「 相機有時刪除文本,因此...和我試圖得到的詞是」概念「,如果它在這個例子中的作品,它將與所有。 (I沒有我想要掃描尚項目,但格式會是這樣:) 1 WILLS 2. MATTHEW DAVID 。 3. 039371英國 。 。 (等) –

回答

1

感謝肯Thomases,我解決了這個問題,我的代碼工作正常,但我用/ N,而不是\ n

這樣:

NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"name: (.*?) \n" options:NSRegularExpressionCaseInsensitive error:nil]; 

級的作品,但我有一個新的問題,我將發佈一個新的問題 如果「密鑰」是一個數字,它不會工作,例如

NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"1 (.*?) \n" options:NSRegularExpressionCaseInsensitive error:nil]; 

它返回一個錯誤「主題1:信號SIGABRIT「這是有問題的,因爲駕駛執照上出現的密鑰都是數字......所以現在我必須尋找替代品

相關問題