我有一个字符串,"323 ECO Economics Course 451 ENG English Course 789 Mathematical Topography"我想使用regex表达式拆分此字符串,[0-9][0-9][0-9][A-Z][A-Z][A-Z]以便该函数返回数组:
"323 ECO Economics Course 451 ENG English Course 789 Mathematical Topography"
[0-9][0-9][0-9][A-Z][A-Z][A-Z]
Array = ["323 ECO Economics Course ", "451 ENG English Course", "789 Mathematical Topography"]
我将如何使用Swift进行此操作?
编辑 我的问题不同于链接的问题。我意识到您可以使用迅速拆分字符串myString.components(separatedBy: "splitting string")。问题是该问题没有解决如何制作splitting string正则表达式的问题。我尝试使用,mystring.components(separatedBy: "[0-9][0-9][0-9][A-Z][A-Z][A-Z]", options: .regularExpression)但是没有用。
myString.components(separatedBy: "splitting string")
splitting string
mystring.components(separatedBy: "[0-9][0-9][0-9][A-Z][A-Z][A-Z]", options: .regularExpression)
如何使该separatedBy:部分成为正则表达式?
separatedBy:
Swift到目前为止还没有本地正则表达式。但Foundation提供NSRegularExpression。
Foundation
NSRegularExpression
import Foundation let toSearch = "323 ECO Economics Course 451 ENG English Course 789 MAT Mathematical Topography" let pattern = "[0-9]{3} [A-Z]{3}" let regex = try! NSRegularExpression(pattern: pattern, options: []) // NSRegularExpression works with objective-c NSString, which are utf16 encoded let matches = regex.matches(in: toSearch, range: NSMakeRange(0, toSearch.utf16.count)) // the combination of zip, dropFirst and map to optional here is a trick // to be able to map on [(result1, result2), (result2, result3), (result3, nil)] let results = zip(matches, matches.dropFirst().map { Optional.some($0) } + [nil]).map { current, next -> String in let range = current.rangeAt(0) let start = String.UTF16Index(range.location) // if there's a next, use it's starting location as the ending of our match // otherwise, go to the end of the searched string let end = next.map { $0.rangeAt(0) }.map { String.UTF16Index($0.location) } ?? String.UTF16Index(toSearch.utf16.count) return String(toSearch.utf16[start..<end])! } dump(results)
运行此将输出
▿ 3 elements - "323 ECO Economics Course " - "451 ENG English Course " - "789 MAT Mathematical Topography"