如何在swift中的特定字符之前和之后获取特定字符串?

问题描述 投票:0回答:4

我有这个字符串:"lat/lng: (-6.2222391,106.7035684)"

我只需要在那个string中获得那些双重数据类型。那么如何只获得* -6.222239 * 1和106.7035684作为字符串变量?

如何获得括号中的数字?

所以我想我在"("之后和","之前获得"-6.2222391"以及","之后和")"之前得到"106.7035684"

但我不知道如何在代码中得到它

swift
4个回答
1
投票
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])

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]+急切地寻找至少一个或多个字符+-.,或从09的数字,
  • (?=,)是积极向前看,它匹配任何后跟,

现在让我们使用这个正则表达式:

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
投票

你已经收到了一些好的答案。但我想我已经想出了一个更紧凑的版本。

你需要关心- 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"

0
投票

试试这个:

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])
© www.soinside.com 2019 - 2024. All rights reserved.