import Foundation
let pattern = #":\s"(?:.*)\s([a-zA-Z]+(?:['-][a-zA-Z]+)*)\s(?=[A-Z]{2,3})(?:.*)""#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
[
{"name": "Hon Tony Abbott MP", "party": "Liberal Party of Australia"},
{"name": "Hon Anthony Albanese MP", "party": "Australian Labor Party"},
{"name": "Mr John Alexander OAM, MP", "party": "Liberal Party of Australia"},
{"name": "Dr Anne Aly MP", "party": "Australian Labor Party"},
{"name": "Hon Karen Andrews MP", "party": "Liberal Party of Australia"},
{"name": "Hon Kevin Andrews MP", "party": "Liberal Party of Australia"},
{"name": "Mr Adam Bandt MP", "party": "Australian Greens"},
{"name": "Ms Julia Banks MP", "party": "Independent"},
{"name": "Hon Sharon Bird MP", "party": "Australian Labor Party"},
{"name": "Hon Chris Bowen MP", "party": "Australian Labor Party"},
{"name": "Mr Russell Broadbent MP", "party": "Liberal Party of Australia"},
{"name": "Hon Scott Buchholz MP", "party": "Liberal Party of Australia"},
{"name": "Hon Tony Burke MP", "party": "Australian Labor Party"},
{"name": "Hon Linda Burney MP", "party": "Australian Labor Party"},
{"name": "Hon Mark Butler MP", "party": "Australian Labor Party"},
{"name": "Ms Terri Butler MP", "party": "Australian Labor Party"},
{"name": "Hon Anthony Byrne MP", "party": "Australian Labor Party"},
{"name": "Dr Jim Chalmers MP", "party": "Australian Labor Party"},
{"name": "Mr Nick Champion MP", "party": "Australian Labor Party"},
{"name": "Hon Darren Chester MP", "party": "The Nationals"},
{"name": "Ms Lisa Chesters MP", "party": "Australian Labor Party"},
{"name": "Mr George Christensen MP", "party": "The Nationals"},
{"name": "Hon Jason Clare MP", "party": "Australian Labor Party"},
{"name": "Ms Sharon Claydon MP", "party": "Australian Labor Party"},
{"name": "Hon David Coleman MP", "party": "Liberal Party of Australia"},
{"name": "Hon Julie Collins MP", "party": "Australian Labor Party"},
{"name": "Mr Pat Conroy MP", "party": "Australian Labor Party"},
{"name": "Hon Mark Coulton MP", "party": "The Nationals"},
{"name": "Mr Chris Crewther MP", "party": "Liberal Party of Australia"},
{"name": "Mr Milton Dick MP", "party": "Australian Labor Party"},
{"name": "Hon Mark Dreyfus QC, MP", "party": "Australian Labor Party"},
{"name": "Hon Damian Drum MP", "party": "The Nationals"},
{"name": "Hon Peter Dutton MP", "party": "Liberal Party of Australia"},
{"name": "Hon Justine Elliot MP", "party": "Australian Labor Party"},
{"name": "Hon Warren Entsch MP", "party": "Liberal Party of Australia"},
{"name": "Mr Trevor Evans MP", "party": "Liberal Party of Australia"},
{"name": "Mr Jason Falinski MP", "party": "Liberal Party of Australia"},
{"name": "Hon Joel Fitzgibbon MP", "party": "Australian Labor Party"},
{"name": "Hon Paul Fletcher MP", "party": "Liberal Party of Australia"},
{"name": "Ms Nicolle Flint MP", "party": "Liberal Party of Australia"},
{"name": "Dr Mike Freelander MP", "party": "Australian Labor Party"},
{"name": "Hon Josh Frydenberg MP", "party": "Liberal Party of Australia"},
{"name": "Hon Andrew Gee MP", "party": "The Nationals"},
{"name": "Mr Steve Georganas MP", "party": "Australian Labor Party"},
{"name": "Mr Andrew Giles MP", "party": "Australian Labor Party"},
{"name": "Hon Dr David Gillespie MP", "party": "The Nationals"},
{"name": "Mr Ian Goodenough MP", "party": "Liberal Party of Australia"},
{"name": "Mr Patrick Gorman MP", "party": "Australian Labor Party"},
{"name": "Mr Luke Gosling OAM, MP", "party": "Australian Labor Party"},
{"name": "Mr Ross Hart MP", "party": "Australian Labor Party"},
{"name": "Mr Andrew Hastie MP", "party": "Liberal Party of Australia"},
{"name": "Hon Alex Hawke MP", "party": "Liberal Party of Australia"},
{"name": "Mr Chris Hayes MP", "party": "Australian Labor Party"},
{"name": "Hon Sarah Henderson MP", "party": "Liberal Party of Australia"},
{"name": "Mr Julian Hill MP", "party": "Australian Labor Party"},
{"name": "Mr Kevin Hogan MP", "party": "The Nationals"},
{"name": "Mr Luke Howarth MP", "party": "Liberal Party of Australia"},
{"name": "Hon Greg Hunt MP", "party": "Liberal Party of Australia"},
{"name": "Hon Ed Husic MP", "party": "Australian Labor Party"},
{"name": "Hon Steve Irons MP", "party": "Liberal Party of Australia"},
{"name": "Mr Stephen Jones MP", "party": "Australian Labor Party"},
{"name": "Hon Barnaby Joyce MP", "party": "The Nationals"},
{"name": "Hon Bob Katter MP", "party": "Katter's Australian Party"},
{"name": "Ms Ged Kearney MP", "party": "Australian Labor Party"},
{"name": "Ms Justine Keay MP", "party": "Australian Labor Party"},
{"name": "Hon Michael Keenan MP", "party": "Liberal Party of Australia"},
{"name": "Mr Craig Kelly MP", "party": "Liberal Party of Australia"},
{"name": "Hon Dr Mike Kelly AM, MP", "party": "Australian Labor Party"},
{"name": "Mr Matt Keogh MP", "party": "Australian Labor Party"},
{"name": "Mr Peter Khalil MP", "party": "Australian Labor Party"},
{"name": "Hon Catherine King MP", "party": "Australian Labor Party"},
{"name": "Ms Madeleine King MP", "party": "Australian Labor Party"},
{"name": "Ms Susan Lamb MP", "party": "Australian Labor Party"},
{"name": "Mr Andrew Laming MP", "party": "Liberal Party of Australia"},
{"name": "Hon Michelle Landry MP", "party": "The Nationals"},
{"name": "Mr Julian Leeser MP", "party": "Liberal Party of Australia"},
{"name": "Hon Dr Andrew Leigh MP", "party": "Australian Labor Party"},
{"name": "Hon Sussan Ley MP", "party": "Liberal Party of Australia"},
{"name": "Hon David Littleproud MP", "party": "The Nationals"},
{"name": "Mrs Nola Marino MP", "party": "Liberal Party of Australia"},
{"name": "Hon Richard Marles MP", "party": "Australian Labor Party"},
{"name": "Ms Emma McBride MP", "party": "Australian Labor Party"},
{"name": "Hon Michael McCormack MP", "party": "The Nationals"},
{"name": "Hon Dr John McVeigh MP", "party": "Liberal Party of Australia"},
{"name": "Mr Brian Mitchell MP", "party": "Australian Labor Party"},
{"name": "Mr Rob Mitchell MP", "party": "Australian Labor Party"},
{"name": "Hon Scott Morrison MP", "party": "Liberal Party of Australia"},
{"name": "Mr Ben Morton MP", "party": "Liberal Party of Australia"},
{"name": "Hon Shayne Neumann MP", "party": "Australian Labor Party"},
{"name": "Mr Llew O'Brien MP", "party": "The Nationals"},
{"name": "Mr Ted O'Brien MP", "party": "Liberal Party of Australia"},
{"name": "Hon Brendan O'Connor MP", "party": "Australian Labor Party"},
{"name": "Mr Ken O'Dowd MP", "party": "The Nationals"},
{"name": "Hon Kelly O'Dwyer MP", "party": "Liberal Party of Australia"},
{"name": "Ms Clare O'Neil MP", "party": "Australian Labor Party"},
{"name": "Ms Cathy O'Toole MP", "party": "Australian Labor Party"},
{"name": "Ms Julie Owens MP", "party": "Australian Labor Party"},
{"name": "Mr Tony Pasin MP", "party": "Liberal Party of Australia"},
{"name": "Mr Graham Perrett MP", "party": "Australian Labor Party"},
{"name": "Dr Kerryn Phelps AM, MP", "party": "Independent"},
{"name": "Hon Keith Pitt MP", "party": "The Nationals"},
{"name": "Hon Tanya Plibersek MP", "party": "Australian Labor Party"},
{"name": "Hon Christian Porter MP", "party": "Liberal Party of Australia"},
{"name": "Hon Melissa Price MP", "party": "Liberal Party of Australia"},
{"name": "Hon Christopher Pyne MP", "party": "Liberal Party of Australia"},
{"name": "Mr Rowan Ramsey MP", "party": "Liberal Party of Australia"},
{"name": "Hon Amanda Rishworth MP", "party": "Australian Labor Party"},
{"name": "Hon Stuart Robert MP", "party": "Liberal Party of Australia"},
{"name": "Ms Michelle Rowland MP", "party": "Australian Labor Party"},
{"name": "Ms Joanne Ryan MP", "party": "Australian Labor Party"},
{"name": "Ms Rebekha Sharkie MP", "party": "Centre Alliance"},
{"name": "Hon Bill Shorten MP", "party": "Australian Labor Party"},
{"name": "Hon Tony Smith MP", "party": "Liberal Party of Australia"},
{"name": "Hon Warren Snowdon MP", "party": "Australian Labor Party"},
{"name": "Ms Anne Stanley MP", "party": "Australian Labor Party"},
{"name": "Hon Michael Sukkar MP", "party": "Liberal Party of Australia"},
{"name": "Ms Meryl Swanson MP", "party": "Australian Labor Party"},
{"name": "Hon Angus Taylor MP", "party": "Liberal Party of Australia"},
{"name": "Hon Dan Tehan MP", "party": "Liberal Party of Australia"},
{"name": "Ms Susan Templeman MP", "party": "Australian Labor Party"},
{"name": "Hon Matt Thistlethwaite MP", "party": "Australian Labor Party"},
{"name": "Hon Alan Tudge MP", "party": "Liberal Party of Australia"},
{"name": "Ms Maria Vamvakinou MP", "party": "Australian Labor Party"},
{"name": "Mr Bert van Manen MP", "party": "Liberal Party of Australia"},
{"name": "Mr Ross Vasta MP", "party": "Liberal Party of Australia"},
{"name": "Mr Andrew Wallace MP", "party": "Liberal Party of Australia"},
{"name": "Mr Tim Watts MP", "party": "Australian Labor Party"},
{"name": "Mrs Lucy Wicks MP", "party": "Liberal Party of Australia"},
{"name": "Mr Andrew Wilkie MP", "party": "Independent"},
{"name": "Mr Josh Wilson MP", "party": "Australian Labor Party"},
{"name": "Mr Rick Wilson MP", "party": "Liberal Party of Australia"},
{"name": "Mr Tim Wilson MP", "party": "Liberal Party of Australia"},
{"name": "Mr Jason Wood MP", "party": "Liberal Party of Australia"},
{"name": "Hon Ken Wyatt AM, MP", "party": "Liberal Party of Australia"},
{"name": "Mr Tony Zappia MP", "party": "Australian Labor Party"},
{"name": "Mr Trent Zimmerman MP", "party": "Liberal Party of Australia"}
]
"""#
let stringRange = NSRange(location: 0, length: testString.utf16.count)
let matches = regex.matches(in: testString, range: stringRange)
var result: [[String]] = []
for match in matches {
var groups: [String] = []
for rangeIndex in 1 ..< match.numberOfRanges {
let nsRange = match.range(at: rangeIndex)
guard !NSEqualRanges(nsRange, NSMakeRange(NSNotFound, 0)) else { continue }
let string = (testString as NSString).substring(with: nsRange)
groups.append(string)
}
if !groups.isEmpty {
result.append(groups)
}
}
print(result)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Swift 5.2, please visit: https://developer.apple.com/documentation/foundation/nsregularexpression