Значение строки иногда меняется
93,93% - 94,13, 85,34,% 74,90, 88,21%
Мне просто нужно извлечь двойное значение, как это.
93,93, 85,34, 74,90, 88,21
Используйте Сканер для сканирования значений.Scanner имеет широкие возможности настройки и предназначен для сканирования строковых и числовых значений из слабо разграниченных строк.Ниже приведен пример:
Scanner
let characterSet = CharacterSet.init(charactersIn: "0123456789.").inverted let scanner = Scanner(string: "93.93% - 94.13, 85.34, %74.90, 88.21%") scanner.charactersToBeSkipped = characterSet var numStr: NSString? while scanner.scanUpToCharacters(from: characterSet, into: &numStr) { print(numStr ?? "") }
Вывод:
93.93 94.13 85.34 74.90 88.21
Сравнительное регулярное выражение легче понять.
Вы можете использовать регулярные выражения для извлечения чисел из вашей строки следующим образом:
let sourceString = "93.93% - 94.13, 85.34, %74.90, 88.21%" func getNumbers(from string : String) -> [String] { let pattern = "((\\+|-)?([0-9]+)(\\.[0-9]+)?)|((\\+|-)?\\.?[0-9]+)" // Change this according to your requirement let regex = try! NSRegularExpression(pattern: pattern) let matches = regex.matches(in: string, range: NSRange(string.startIndex..., in: string)) let result = matches.map { (match) -> String in let range = Range(match.range, in: string)! return String(string[range]) } return result } let numberArray = getNumbers(from: sourceString) print(numberArray)
Результат:
["93.93", "94.13", "85.34", "74.90", "88.21"]
для каждого значения, такого как var str='%74.90';, используйте эту строку -
var str='%74.90';
var double=str.match(/[+-]?\d+(\.\d+)?/g).map(function(v) { return parseFloat(v); })[0];
Вы должны попробовать использовать регулярное выражение, например, вот так:
[0-9]{2}.[0-9]{2}
Это регулярное выражение находит все строки, которые совпадают с двумя числами, затем снова с точкой и двумя числами.