'pure' Schnelle Lösung, keine Klammern erforderlich
let str = ["add egg £ 2.00",
"the price is $12.00 per unit",
"send €10.22 to somebody",
"invalid $(12)"]
func value(str: String, currency: String)->Double {
var chars = str.characters
let currs = currency.characters
while !currs.contains(chars.popFirst() ?? " ") {}
let arr = chars.split(" ")
guard let value = arr.first,
let d = Double(String(value)) else { return Double.NaN }
return d
}
let values = str.flatMap { value($0, currency: "£$€") }
print(values)
/*
[2.0, 12.0, 10.220000000000001, nan]
*/
, wenn Sie wirklich die Klammern dort benötigen, kein Problem ...
let str = ["add egg (£2.00)",
"the price is ($12.00) per unit",
"send (€10.22) to somebody",
"invalid ($-12)"]
func value(str: String, currency: String)->Double {
var chars = str.characters
let currs = currency.characters
while !currs.contains(chars.popFirst() ?? " ") {}
let arr = chars.split(")")
guard let value = arr.first,
let d = Double(String(value)) else { return Double.NaN }
return d
}
let values = str.flatMap { value($0, currency: "£$€") }
print(values)
/*
[2.0, 12.0, 10.220000000000001, -12.0]
*/
Ihre Zeichenfolge sollte immer in diesem Muster "Ei (£ 2.00) hinzufügen"? Ich meine, "add (£ )" –
NSAnant
Für jetzt, ja. Aber ich möchte die Dinge dynamischer halten, für den Fall, dass sich das Muster in der Zukunft ändern muss, und dabei entlang der Regex-Linie denken. – Polis
für Regex, Sie benötigen einen festen Patten zu entsprechen. – NSAnant