There is a clever 1st answer given here for splitting swift string with a regex expression
However it keeps the searched text within the array of answers. I'm trying to do a similar thing, but ignoring the characters acting as separators (e.g. just like the swift split function, but just with a regex expression as the separator).
As an example: regex would be something like
"\\\||Z|ZY"
and when applied to string of "hi|thisZshouldZYbe|separated"
then you would get back an array
["hi", "this", "should", "be", "separated"]
NB. The regex is adapted to the swift NSRegularExpression format with the double escape. In regular regex it would just be "\||Z|ZY" Also NB the regex contains the vertical line symbol not the letter "l"
You prob don't need to do too many tweaks to the original to make work.
You can define an extension like this:
extension String {
func split(usingRegex pattern: String) -> [String] {
//### Crashes when you pass invalid `pattern`
let regex = try! NSRegularExpression(pattern: pattern)
let matches = regex.matches(in: self, range: NSRange(0..<utf16.count))
let ranges = [startIndex..<startIndex] + matches.map{Range($0.range, in: self)!} + [endIndex..<endIndex]
return (0...matches.count).map {String(self[ranges[$0].upperBound..<ranges[$0+1].lowerBound])}
}
}
let str = "hi|thisZshouldZYbe|separated"
let separator = "\\||ZY?"
let result = str.split(usingRegex: separator)
print(result) //->["hi", "this", "should", "be", "separated"]
The above code does not work as you expect when you use "\\||Z|ZY"
, but I think you can modify your pattern to fit into this extension.
My suggestion is to create an UUID string as separator, then replace the occurrences of the regex pattern with this UUID string and split the string.
let string = "hi|thisZshouldZYbe|separated"
let uuid = UUID().uuidString
let result = string.replacingOccurrences(of: "\\||ZY?", with: uuid, options: .regularExpression).components(separatedBy: uuid)
Your pattern works only in another order of the OR parts ("\\||ZY|Z"
)
来源:https://stackoverflow.com/questions/53238251/swift-splitting-strings-with-regex-ignoring-search-string