import Foundation
let pattern = #"<p><span class='label'>Rating<\/span>: <div class='metadata' id='rating'>(.*?)<\/div><p>"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
<p><span class='label'>Adapter_Classes</span>: <div class='metadata list' id='adapter_classes'><ul>
<li>FanFictionNetSiteAdapter</li>
</ul></div><p>
<p><span class='label'>Author</span>: <div class='metadata list' id='author'><ul>
<li>Ms Katonic</li>
</ul></div><p>
<p><span class='label'>Authorhtml</span>: <div class='metadata' id='authorHTML'><a class='authorlink' href='https://www.fanfiction.net/u/27687/Ms-Katonic'>Ms Katonic</a></div><p>
<p><span class='label'>Author ID</span>: <div class='metadata list' id='authorId'><ul>
<li>27687</li>
</ul></div><p>
<p><span class='label'>Author URL</span>: <div class='metadata list' id='authorUrl'><ul>
<li>https://www.fanfiction.net/u/27687/Ms-Katonic</li>
</ul></div><p>
<p><span class='label'>Category</span>: <div class='metadata list' id='category'><ul>
<li>Elder Scroll series</li>
</ul></div><p>
<p><span class='label'>Characters</span>: <div class='metadata list' id='characters'><ul>
<li>Elisif</li>
<li>Argis the Bulwark</li>
<li>Madanach</li>
<li>Ulfric Stormcloak</li>
</ul></div><p>
<p><span class='label'>Packaged</span>: <div class='metadata datetime' id='dateCreated'>2020-11-26T00:15:59.499793</div><p>
<p><span class='label'>Published</span>: <div class='metadata datetime' id='datePublished'>2013-09-28T12:26:48</div><p>
<p><span class='label'>Updated</span>: <div class='metadata datetime' id='dateUpdated'>2015-05-05T18:23:45</div><p>
<p><span class='label'>Summary</span>: <div class='metadata' id='description'>Dragons may signify the world's end but as far as Elisif's concerned, her world ended well before that when Ulfric Stormcloak murdered her husband. So it is that no one's more surprised than her when a dragon attack on Solitude reveals that there's more to the High Queen in waiting than anyone</div><p>
<p><span class='label'>Extra Tags</span>: <div class='metadata list' id='extratags'><ul>
<li>FanFiction</li>
</ul></div><p>
<p><span class='label'>Favs</span>: <div class='metadata' id='favs'>343</div><p>
<p><span class='label'>Follows</span>: <div class='metadata' id='follows'>245</div><p>
<p><span class='label'>File Extension</span>: <div class='metadata' id='formatext'>.epub</div><p>
<p><span class='label'>File Format</span>: <div class='metadata' id='formatname'>epub</div><p>
<p><span class='label'>Genre</span>: <div class='metadata list' id='genre'><ul>
<li>Adventure</li>
<li>Drama</li>
</ul></div><p>
<p><span class='label'>Langcode</span>: <div class='metadata' id='langcode'>en</div><p>
<p><span class='label'>Language</span>: <div class='metadata' id='language'>English</div><p>
<p><span class='label'>Lastupdate</span>: <div class='metadata list' id='lastupdate'><ul>
<li>Last Update Year/Month: 2015/05</li>
<li>Last Update: 2015/05/05</li>
</ul></div><p>
<p><span class='label'>Chapters</span>: <div class='metadata int' id='numChapters'>50</div><p>
<p><span class='label'>Words</span>: <div class='metadata' id='numWords'>383,344</div><p>
<p><span class='label'>Python_Version</span>: <div class='metadata' id='python_version'>3.8.5 (default, Aug 26 2020, 22:00:02) [MSC v.1927 64 bit (AMD64)]</div><p>
<p><span class='label'>Rating</span>: <div class='metadata' id='rating'>M</div><p>
<p><span class='label'>Reviews</span>: <div class='metadata' id='reviews'>203</div><p>
<p><span class='label'>Story URL Section</span>: <div class='metadata' id='sectionUrl'>https://www.fanfiction.net/s/9721808/1/</div><p>
<p><span class='label'>Publisher</span>: <div class='metadata' id='site'>www.fanfiction.net</div><p>
<p><span class='label'>Site Abbrev</span>: <div class='metadata' id='siteabbrev'>ffnet</div><p>
<p><span class='label'>Status</span>: <div class='metadata' id='status'>Completed</div><p>
<p><span class='label'>Story ID</span>: <div class='metadata' id='storyId'>9721808</div><p>
<p><span class='label'>Story URL</span>: <div class='metadata' id='storyUrl'>https://www.fanfiction.net/s/9721808/1/</div><p>
<p><span class='label'>Title</span>: <div class='metadata' id='title'>The Wolf Queen Awakens</div><p>
<p><span class='label'>Titlehtml</span>: <div class='metadata' id='titleHTML'><a class='titlelink' href='https://www.fanfiction.net/s/9721808/1/'>The Wolf Queen Awakens</a></div><p>
<p><span class='label'>Downloader Version</span>: <div class='metadata' id='version'>FanFicFare v3.99.18</div><p>
"""#
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