Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.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
Ios 从swift中的字符串中提取值_Ios_Regex_Swift - Fatal编程技术网

Ios 从swift中的字符串中提取值

Ios 从swift中的字符串中提取值,ios,regex,swift,Ios,Regex,Swift,我有一个如下所示的字符串,我正在尝试将每个部分(,)分离到一个数组中 let stringArr = remainderString.componentsSeparatedByString(",") 0lY6P5Ur90TAQnnnI6wtnb,#29,项目FZK豪斯,项目FZK豪斯创建 由KHH Forschungszentrum Karlsruhe,$,$,$,(#67,#229,#275),#42 结果 ["0lY6P5Ur90TAQnnnI6wtnb", "#29", "Projekt

我有一个如下所示的字符串,我正在尝试将每个部分(,)分离到一个数组中

let stringArr = remainderString.componentsSeparatedByString(",")
0lY6P5Ur90TAQnnnI6wtnb,#29,项目FZK豪斯,项目FZK豪斯创建 由KHH Forschungszentrum Karlsruhe,$,$,$,(#67,#229,#275),#42

结果

["0lY6P5Ur90TAQnnnI6wtnb", "#29", "Projekt-FZK-Haus", "Projekt FZK-House create by KHH Forschuungszentrum Karlsruhe", "$", "$", "$", "(#67", "#229", "#275)", "#42"]
如果您注意到,(#67、#229、#275)部分被分隔为“(#67”、“#229”、“#275”)

我想将这些值插入(大括号)到另一个数组中。因此,我的问题是,我如何定位开头的然后是结尾的

试试这个:

// Subscripting a String with NSRange. Make dealing with ObjC-classes easier
extension String {
    subscript(range: NSRange) -> String {
        let startIndex = self.startIndex.advancedBy(range.location)
        let endIndex = startIndex.advancedBy(range.length)

        return self[startIndex..<endIndex]
    }
}

let str = "0lY6P5Ur90TAQnnnI6wtnb,#29,Projekt-FZK-Haus,Projekt FZK-House create by KHH Forschuungszentrum Karlsruhe,$,$,$,(#67,#229,#275),#42"
let regex = try! NSRegularExpression(pattern: "\\((#[^\\)]+)\\)", options: [])

if let match = regex.firstMatchInString(str, options: [], range: NSMakeRange(0, str.characters.count)) {
    let substr = str[match.rangeAtIndex(1)]
    let components = substr.componentsSeparatedByString(",")

    print(components)
}
//使用NSRange订阅字符串。使处理ObjC类更容易
扩展字符串{
下标(范围:NSRange)->字符串{
让startIndex=self.startIndex.advancedBy(range.location)
让endIndex=startIndex.advancedBy(range.length)

返回self[startIndex..另一个示例。正确使用基于UTF-16的索引和范围,因此可以处理包含非BMP字符的字符串

let str = "0lY6P5Ur90TAQnnnI6wtnb,#29,Projekt-FZK-Haus,Projekt FZK-House create by KHH Forschuungszentrum Karlsruhe,$,$,$,(#67,#229,#275),#42"
let pattern = "(\\([^\\)]*\\)|[^\\(,][^,]*)(?:,|$)"
let regex = try! NSRegularExpression(pattern: pattern, options: [])
let matches = regex.matchesInString(str, options: [], range: NSRange(0..<str.utf16.count))
let stringArr = matches.map{match->String in
    let matchingRange = match.rangeAtIndex(1)
    let matchingString = (str as NSString).substringWithRange(matchingRange) as String
    return matchingString
}
print(stringArr) //->["0lY6P5Ur90TAQnnnI6wtnb", "#29", "Projekt-FZK-Haus", "Projekt FZK-House create by KHH Forschuungszentrum Karlsruhe", "$", "$", "$", "(#67,#229,#275)", "#42"]
让str=“0lY6P5Ur90TAQnnnI6wtnb,#29,Projekt FZK Haus,Projekt FZK House由kh forschungszentrum Karlsruhe创建,$,$,$,(#67,#229,#275),#42”
let pattern=“(\\([^\\)]*\\)\[^\(,][^,]*)(?:,[124;$)”
让regex=try!NSRegularExpression(模式:模式,选项:[])
让matches=regex.matcheInstalling(str,选项:[],范围:NSRange(0..String in
让matchingRange=match.rangeAtIndex(1)
让matchingString=(str作为NSString)。substringWithRange(matchingRange)作为字符串
返回匹配字符串
}
打印(stringArr)/->[“0lY6P5Ur90TAQnnnI6wtnb”,“29”,“Projekt FZK Haus”,“Projekt FZK House由KHH Forschungszentrum Karlsruhe创建”,“$”,“$”,“(#67,#229,#275)”,“#42”]

一个问题,你想得到全部(#67,#229,#275)作为一个文本,或者您只想知道何时打开右括号?您可以使用正则表达式分别匹配子字符串。@ReinierMelian我正在尝试将左大括号与右大括号匹配。如果将其作为一个文本,则可以。若要处理基于NSString性质的范围,您不能在中使用
字符
dex.NSString使用基于UTF-16的索引,因此您的代码需要修改为使用基于utf16的索引和范围。@代码不同非常感谢。我这样做了,而且似乎很有效。这正是我想要的解决方案。谢谢。