只从句子中提取包含数字的单词

时间:2016-11-03 22:58:55

标签: ios swift xcode

我正在使用TesseractOCR阅读收据,我已设法逐行从收据中提取文本,例如

2 melon            £3.00
1 lime             £1.50
5 chicken wings    £10.00

但是现在,对于每一行,我想提取项目名称(瓜,石灰,鸡翅),然后整数,然后浮动所有单独逐行。我已经google了很多,并使用正则表达式在ruby中写了这个,但是无法弄清楚如何在swift中完成它。我已经想出了浮点数和整数部分,而不只是单词的一部分。

答案的链接已经很好或者是答案。感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:1)

如果你在Ruby中使用正则表达式解决了这个问题,那么Swift中的解决方案是类似的。首先让我们定义一些辅助函数,因为NSRegularExpression仍以NSRange单位处理:

extension String {
    var fullRange: NSRange {
        return NSMakeRange(0, self.characters.count)
    }

    subscript(range: NSRange) -> String {
        let startIndex = self.index(self.startIndex, offsetBy: range.location)
        let endIndex   = self.index(startIndex, offsetBy: range.length)

        return self[startIndex..<endIndex]
    }
}

代码:

let text =
    "2 melon            £3.00\n" +
    "1 lime             £1.50\n" +
    "5 chicken wings    £10.00"

let regex = try! NSRegularExpression(pattern: "(\\d+)\\s+(.+?)\\s+£([\\d\\.]+)$", options: [.anchorsMatchLines])

regex.enumerateMatches(in: text, options: [], range: text.fullRange) { result, flag, stop in
    if let result = result {
        let r1 = result.rangeAt(1)
        let r2 = result.rangeAt(2)
        let r3 = result.rangeAt(3)

        print("quantity = \(text[r1]), item = \(text[r2]), price = \(text[r3])")
    }
}

答案 1 :(得分:0)

使用componentSeparatedByString

let a = "5 Chicken Wing"
let b = a.componentSeparatedByString(" ") //meaning space
let b0 = b[0] //5
let b1 = b[1] //Chicken
let b2 = b[2] //Wing