我有这个字符串:"lat/lng: (-6.2222391,106.7035684)"
我只需要在那个string
中获得那些双重数据类型。那么如何只获得* -6.222239 * 1和106.7035684作为字符串变量?
如何获得括号中的数字?
所以我想我在"("
之后和","
之前获得"-6.2222391"
以及","
之后和")"
之前得到"106.7035684"
但我不知道如何在代码中得到它
let source = "lat/lng: (-6.2222391,106.7035684)"
let splited = source.components(separatedBy: "lat/lng: ")[1] //separating
let removed = splited.replacingOccurrences(of: "(", with: "").replacingOccurrences(of: ")", with: "") // removing
let coord = removed.components(separatedBy: ",") // removing
let lat = Double(coord[0])
let lng = Double(coord[1])
你可以使用正则表达式:
let str = "lat/lng: (-6.2222391,106.7035684)"
let rg = NSRange(location: 0, length: (str as NSString).length)
let latRegex = try! NSRegularExpression(pattern: "(?<=\\()[+-\\.0-9]+(?=,)")
(?<=\\()
是积极的背后,它寻找任何前面的(
,[+-\\.0-9]+
急切地寻找至少一个或多个字符+
,-
,.
,或从0
到9
的数字,(?=,)
是积极向前看,它匹配任何后跟,
。现在让我们使用这个正则表达式:
let latitude: Double? = latRegex.matches(in: str, range: rg)
.compactMap { Double(str[Range($0.range, in: str)!]) }
.first
if let lat = latitude {
print(lat) //-6.2222391
}
以同样的方式,我们可以得到经度:
let longRegex = try! NSRegularExpression(pattern: "(?<=,)[+-\\.0-9]+(?=\\))")
let longitude: Double? = longRegex.matches(in: str, range: rg)
.compactMap { Double(str[Range($0.range, in: str)!]) }
.first
if let long = longitude {
print(long) //106.7035684
}
PS:为了简洁起见,我曾在这里和那里使用过强行展开
你已经收到了一些好的答案。但我想我已经想出了一个更紧凑的版本。
你需要关心-
0~9
.
和,
,
将仅考虑具有这两种成分,然后用于分离它们。
看到这个:
let source = "lat/lng: (-6.2222391,106.7035684)"
let allowedCharactersString = "-01234567890.,"
let latLongValues = String(source.characters.filter {
allowedCharactersString.characters.contains($0)
}).components(separatedBy: ",")
print(latLongValues.first!) // "-6.2222391"
print(latLongValues.last!) // "106.7035684"
试试这个:
let source = "lat/lng: (-6.2222391,106.7035684)".components(separatedBy: ")")[0]
let removed = source.components(separatedBy: "(")[1];// removing
//OR
//let source = "lat/lng: (-6.2222391,106.7035684)".components(separatedBy: "(")[1]
//let removed = source.components(separatedBy: ")")[0];// removing
let coord = removed.components(separatedBy: ",") // removing
let lat = Double(coord[0])
let lng = Double(coord[1])