我正在使用TesseractOCR阅读收据,我已设法逐行从收据中提取文本,例如
2 melon £3.00
1 lime £1.50
5 chicken wings £10.00
但是现在,对于每一行,我想提取项目名称(瓜,石灰,鸡翅),然后整数,然后浮动所有单独逐行。我已经google了很多,并使用正则表达式在ruby中写了这个,但是无法弄清楚如何在swift中完成它。我已经想出了浮点数和整数部分,而不只是单词的一部分。
答案的链接已经很好或者是答案。感谢您提前提供任何帮助。
答案 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