Swift 3-检索字符串的特定部分
我对Swift3比较陌生,对于如何实现以下内容,我不太清楚: 我有一个字符串如下所示: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
“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)))
}