Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 3-检索字符串的特定部分_Swift_String - Fatal编程技术网

Swift 3-检索字符串的特定部分

Swift 3-检索字符串的特定部分,swift,string,Swift,String,我对Swift3比较陌生,对于如何实现以下内容,我不太清楚: 我有一个字符串如下所示: “45007KÖPENHAMN H45012KÖPENHAMN NØRREPORT45011KÖPENHAMNØSTERPORT45006CPH机场91220Simrishamn BISKOP ESKILSGATAN439872KÖPENHAMNSKAJEN 1 HELSINGBORG217696KÖPENHAMNSVÄGEN 1 MALMÖ21774KÖPENHAMNSVÖGEN 2 MALM 217777

我对Swift3比较陌生,对于如何实现以下内容,我不太清楚:

我有一个字符串如下所示:

“45007KÖPENHAMN H45012KÖPENHAMN NØRREPORT45011KÖPENHAMNØSTERPORT45006CPH机场91220Simrishamn BISKOP ESKILSGATAN439872KÖPENHAMNSKAJEN 1 HELSINGBORG217696KÖPENHAMNSVÄGEN 1 MALMÖ21774KÖPENHAMNSVÖGEN 2 MALM 2177774KÖPENHAMNSVÖGEN 3 MALM MALM 2177774KÖPENHAMNSVÖ1963; GEN MALM MALM 1963b MALM 1963b MALM MALM MALM MALM(CMP)马尔姆192654ARILDS GÄSTHAMN HÄGAN䳑s1927Domstens GÄSTHAMN HELSINGBORG181286FRISKVÅRDSENHET LIMHAMN95006GÖTEBORG C87071TRELLEBORG C80520马尔姆Ö林德堡中心33437VysteborgsvÄ27 BÖStad43595; Skarhult Skatteborgborg FLYINGE238027LINDEBORGSGATAN 1 MALMÖ306369; 235750s MalleborgborgborgsgatanORG193244BÖSTE Trelleborg193083马格拉普Trelleborg67151酒店Hotell HORIZONT TRELLEBORG48053KATTEBÄCKSSKOLAN TRELLEBORG“

格式为5(或6)位代码,然后是代码所属位置的名称

我需要做的是找到一个特定的名称,比如“FRISKVÅRDSENHET LIMHAMN”,然后检索它前面的代码(在本例中为181286)

我已经进行了广泛的搜索,但我发现的所有字符串搜索/索引示例都涉及到从字符串的开始/结束移动一段距离,这对我的情况没有帮助


提前谢谢。

使用正则表达式很容易

您必须搜索5-6位数字,后跟查询字符串

regex模式周围的一对括号捕获了后面在范围索引1处的匹配中可用的数字

let string = "45007KÖPENHAMN H45012KÖPENHAMN NØRREPORT45011KÖPENHAMN ØSTERPORT45006CPH AIRPORT91220SIMRISHAMN BISKOP ESKILSGATAN439872KÖPENHAMNSKAJEN 1 HELSINGBORG217696KÖPENHAMNSVÄGEN 1 MALMÖ217741KÖPENHAMNSVÄGEN 2 MALMÖ217774KÖPENHAMNSVÄGEN 3A MALMÖ217775KÖPENHAMNSVÄGEN 3B MALMÖ222954ARKEN, KÖPENHAMN192513COPENHAGEN MALMÖ PORT (CMP) MALMÖ192654ARILDS GÄSTHAMN HÖGANÄS192657DOMSTENS GÄSTHAMN HELSINGBORG181286FRISKVÅRDSENHET LIMHAMN95006GÖTEBORG C87071TRELLEBORG C80520MALMÖ LINDEBORG CENTRUM33437VYSTEBORGSVÄGEN 27 BÅSTAD435959SKARHULT SKATTEBORG FLYINGE238027LINDEBORGSGATAN 1 MALMÖ306369LILJEBORGSGATAN 1 TRELLEBORG235750SÖVDEBORGSGATAN 3 MALMÖ37006BIBLIOTEK TRELLEBORG193244BÖSTE BED & BREAKFAST TRELLEBORG193083HOTELL & PENSIONAT MAGLARP TRELLEBORG67151HOTELL HORIZONT TRELLEBORG48053KATTEBÄCKSSKOLAN TRELLEBORG"

let query = "FRISKVÅRDSENHET LIMHAMN"

let pattern = "(\\d{5,6})" + query

do {
    let regex = try NSRegularExpression(pattern: pattern, options: [])
    if let match = regex.firstMatch(in: string, range: NSRange(location: 0, length: string.characters.count)) {
        let range = match.rangeAt(1)
        let start = string.index(string.startIndex, offsetBy: range.location)
        let end = string.index(start, offsetBy: range.length)
        print(string.substring(with: start..<end))
    } else {
        print("\(query) not found")
    }
} catch {
    print("Regex Error:", error)
}
let字符串=“45007KÖPENHAMN H45012KÖPENHAMN NØRREPORT45011KÖPENHAMNØSTERPORT45006CPH机场91220Simrishamn BISKOP ESKILSGATAN439872KÖPENHAMNSKAJEN 1 HELSINGBORG217696KÖPENHAMNSVÄGEN 1 MALM 21774KÖPENHAMNSVÖGEN 2 MALM 2177774KÖPENHAMNSVޯGEN 3A MALM 2177775KÖpenhamnsv1963bMalm MALM 1953b,哥本哈根MALMÖPENHAMNSVÖ21923b港(马尔哈姆港)马尔姆192654ARILDS GÄSTHAMN HÄGAN䳑s1927Domstens GÄSTHAMN HELSINGBORG181286FRISKVÅRDSENHET LIMHAMN95006GÖTEBORG C87071TRELLEBORG C80520马尔姆Ö林德堡中心33437VysteborgsvÄ27 BÖStad43595; Skarhult Skatteborgborg FLYINGE238027LINDEBORGSGATAN 1 MALMÖ306369; 235750s MalleborgborgborgsgatanORG193244BÖSTE Trelleborg193083马格拉普Trelleborg67151酒店Hotell HORIZONT TRELLEBORG48053KATTEBÄCKSSKOLAN TRELLEBORG”
let query=“FRISKVÅRDSENHET LIMHAMN”
let pattern=“(\\d{5,6})”+查询
做{
让regex=尝试NSRegularExpression(模式:模式,选项:[])
如果let match=regex.firstMatch(in:string,range:NSRange(位置:0,长度:string.characters.count)){
让range=match.rangeAt(1)
让start=string.index(string.startIndex,offsetBy:range.location)
让end=string.index(start,offsetBy:range.length)

print(string.substring)(with:start..这对于正则表达式非常容易

您必须搜索5-6位数字,后跟查询字符串

regex模式周围的一对括号捕获了后面在范围索引1处的匹配中可用的数字

let string = "45007KÖPENHAMN H45012KÖPENHAMN NØRREPORT45011KÖPENHAMN ØSTERPORT45006CPH AIRPORT91220SIMRISHAMN BISKOP ESKILSGATAN439872KÖPENHAMNSKAJEN 1 HELSINGBORG217696KÖPENHAMNSVÄGEN 1 MALMÖ217741KÖPENHAMNSVÄGEN 2 MALMÖ217774KÖPENHAMNSVÄGEN 3A MALMÖ217775KÖPENHAMNSVÄGEN 3B MALMÖ222954ARKEN, KÖPENHAMN192513COPENHAGEN MALMÖ PORT (CMP) MALMÖ192654ARILDS GÄSTHAMN HÖGANÄS192657DOMSTENS GÄSTHAMN HELSINGBORG181286FRISKVÅRDSENHET LIMHAMN95006GÖTEBORG C87071TRELLEBORG C80520MALMÖ LINDEBORG CENTRUM33437VYSTEBORGSVÄGEN 27 BÅSTAD435959SKARHULT SKATTEBORG FLYINGE238027LINDEBORGSGATAN 1 MALMÖ306369LILJEBORGSGATAN 1 TRELLEBORG235750SÖVDEBORGSGATAN 3 MALMÖ37006BIBLIOTEK TRELLEBORG193244BÖSTE BED & BREAKFAST TRELLEBORG193083HOTELL & PENSIONAT MAGLARP TRELLEBORG67151HOTELL HORIZONT TRELLEBORG48053KATTEBÄCKSSKOLAN TRELLEBORG"

let query = "FRISKVÅRDSENHET LIMHAMN"

let pattern = "(\\d{5,6})" + query

do {
    let regex = try NSRegularExpression(pattern: pattern, options: [])
    if let match = regex.firstMatch(in: string, range: NSRange(location: 0, length: string.characters.count)) {
        let range = match.rangeAt(1)
        let start = string.index(string.startIndex, offsetBy: range.location)
        let end = string.index(start, offsetBy: range.length)
        print(string.substring(with: start..<end))
    } else {
        print("\(query) not found")
    }
} catch {
    print("Regex Error:", error)
}
let string=”45007KÖPENHAMN H45012KÖPENHAMN NØRREPORT45011KÖPENHAMNØSTERPORT45006CPH机场91220Simrishamn BISKOP ESKILSGATAN439872KÖPENHAMNSKAJEN 1 HELSINGBORG217696KÖPENHAMNSVÄGEN 1 MALM 21774KÖPENHAMNSVÖGEN 2 MALM 2177774KÖPENHAMNSVޯ3A MALM MALM 2177775KÖPENHAMNSVÖMALM 1963b,哥本哈根MALMÖÖPENHAMNSVÖ21924; MALM MALMÖ港马尔姆192654ARILDS GÄSTHAMN HÄGAN䳑s1927Domstens GÄSTHAMN HELSINGBORG181286FRISKVÅRDSENHET LIMHAMN95006GÖTEBORG C87071TRELLEBORG C80520马尔姆Ö林德堡中心33437VysteborgsvÄ27 BÖStad43595; Skarhult Skatteborgborg FLYINGE238027LINDEBORGSGATAN 1 MALMÖ306369; 235750s MalleborgborgborgsgatanORG193244BÖSTE Trelleborg193083马格拉普Trelleborg67151酒店Hotell HORIZONT TRELLEBORG48053KATTEBÄCKSSKOLAN TRELLEBORG”
let query=“FRISKVÅRDSENHET LIMHAMN”
let pattern=“(\\d{5,6})”+查询
做{
让regex=尝试NSRegularExpression(模式:模式,选项:[])
如果let match=regex.firstMatch(in:string,range:NSRange(位置:0,长度:string.characters.count)){
让range=match.rangeAt(1)
让start=string.index(string.startIndex,offsetBy:range.location)
让end=string.index(start,offsetBy:range.length)
打印(string.substring)(使用:start..尝试以下代码:

//编写一些很棒的Swift代码,或者导入“Foundation”之类的库,
//“调度”或“Glibc”
进口基金会
让输入=”45007KÖPENHAMN H45012KÖPENHAMN NØRREPORT45011KÖPENHAMNØSTERPORT45006CPH机场91220Simrishamn BISKOP ESKILSGATAN439872KÖPENHAMNSKAJEN 1 HELSINGBORG217696KÖPENHAMNSVÄGEN 1 MALM 21774KÖPENHAMNSVÖGEN 2 MALM 2177774KÖPENHAMNSVޯ3A MALM MALM 2177775KÖPENHAMNSVÖMALM 1963b,哥本哈根MALMÖÖPENHAMNSVÖ21924; MALM MALMÖ港马尔姆192654ARILDS GÄSTHAMN HÄGAN䳑s1927Domstens GÄSTHAMN HELSINGBORG181286FRISKVÅRDSENHET LIMHAMN95006GÖTEBORG C87071TRELLEBORG C80520马尔姆Ö林德堡中心33437VysteborgsvÄ27 BÖStad43595; Skarhult Skatteborgborg FLYINGE238027LINDEBORGSGATAN 1 MALMÖ306369; 235750s MalleborgborgborgsgatanORG193244BÖSTE Trelleborg193083马格拉普Trelleborg67151酒店Hotell HORIZONT TRELLEBORG48053KATTEBÄCKSSKOLAN TRELLEBORG”
let name=“FRISKVÅRDSENHET LIMHAMN”
func isDigit(c:Character)->Bool{
设unicodeScalars=String(c)。unicodeScalars
让unicodeScalar=unicodeScalars[unicodeScalars.startIndex]
返回字符集。小数位数。包含(unicodeScalar)
}
如果let range=inpu
//  Write some awesome Swift code, or import libraries like "Foundation",
//  "Dispatch", or "Glibc"
import Foundation

let input = "45007KÖPENHAMN H45012KÖPENHAMN NØRREPORT45011KÖPENHAMN ØSTERPORT45006CPH AIRPORT91220SIMRISHAMN BISKOP ESKILSGATAN439872KÖPENHAMNSKAJEN 1 HELSINGBORG217696KÖPENHAMNSVÄGEN 1 MALMÖ217741KÖPENHAMNSVÄGEN 2 MALMÖ217774KÖPENHAMNSVÄGEN 3A MALMÖ217775KÖPENHAMNSVÄGEN 3B MALMÖ222954ARKEN, KÖPENHAMN192513COPENHAGEN MALMÖ PORT (CMP) MALMÖ192654ARILDS GÄSTHAMN HÖGANÄS192657DOMSTENS GÄSTHAMN HELSINGBORG181286FRISKVÅRDSENHET LIMHAMN95006GÖTEBORG C87071TRELLEBORG C80520MALMÖ LINDEBORG CENTRUM33437VYSTEBORGSVÄGEN 27 BÅSTAD435959SKARHULT SKATTEBORG FLYINGE238027LINDEBORGSGATAN 1 MALMÖ306369LILJEBORGSGATAN 1 TRELLEBORG235750SÖVDEBORGSGATAN 3 MALMÖ37006BIBLIOTEK TRELLEBORG193244BÖSTE BED & BREAKFAST TRELLEBORG193083HOTELL & PENSIONAT MAGLARP TRELLEBORG67151HOTELL HORIZONT TRELLEBORG48053KATTEBÄCKSSKOLAN TRELLEBORG"

let name = "FRISKVÅRDSENHET LIMHAMN"

func isDigit(_ c: Character) -> Bool {
    let unicodeScalars = String(c).unicodeScalars
    let unicodeScalar = unicodeScalars[unicodeScalars.startIndex]
    return CharacterSet.decimalDigits.contains(unicodeScalar)
}

if let range = input.range(of: name) {
    var index = input.index(before: range.lowerBound)

    while (index != input.startIndex && isDigit(input[index])) {
        index = input.index(before: index)
    }

    if (index != input.startIndex) {
        index = input.index(after: index)
    }

    print(input.substring(with: index..<input.index(before: range.lowerBound)))


}