import Foundation
let pattern = #"\b(?<=\w)\s{20}"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
Ateles_geoffroyi GATGAGTGTGGCAAGGCCCAAGCGGAAGTGCCG--GTTGCT
Ateles_hybridus GATGAGTGTGGCAAGGCCCAAGCGGAAGTGCCG--GTTGCT
Ateles_fusciceps GATGAGTGTGGCAAGGCCCAAGCGGAAGTGC??????????
Ateles_chamek GATGAGTGTGGCAAGGCCCA?????????????????????
Ateles_paniscus ?????????????????????????????????????????
Brachyteles_arachnoides GATGAGTGTGGCAAGGCCCAAGCGGAAGT????????????
Brachyteles_hypoxanthus GATGAGTGTGGCAAG??????????????????????????
Lagothrix_cana GATGAGTGTGGCAAGGCCCAAGCGGAAGTGCCG--GTTGCT
Lagothrix_lagotricha GATGAGTGTGGCAAGGCCCAAGCGGAAGTGCCG--GTTGCT
Alouatta_belzebul ?????????????????????????????????????????
Alouatta_caraya ?????????????????????????????????????????
Alouatta_sara GATGAATGTGGCAAGGCCCAAGCAGAAGTGCCG--GTTGCT
Alouatta_palliata GATGAATGTGGCAAGGCCCAAGCAGAAGTGCCG--GTTGCT
Callicebus_brunneus ?????????????????????????????????????????
Callicebus_moloch GATGAGTGTGGCAAGGCCCAAGCAGAAGTGCCG--G?????
Callicebus_cupreus GATGAGTGTGGCAAGGCCCAAGCAGAAGTGCCG--GTTGCT
Callicebus_caligatus GATGAGTGTGGCAAGGCCCAAGCAGAAGTGCCG--GTTGCT
Callicebus_donacophilus GATGAGTGTGGCAAGGCCCAAGCAGAAGTGCCG--GTTGCT
Callicebus_coimbrai GATGAGTGTGGCAAGGCCCAAGCGGAAGTGCCG--GTTGCT
Callicebus_personatus GATGAGTGTGGCAAGGCCCAAGCGGAA??????????????
Callicebus_nigrifrons GATGAGTGTGGCAAGGCCCAAGCGGAAGTGCCG--GTTGCT
Cacajao_melanocephalus GATGAGTGTGGCAAAGCCCA?????????????????????
Cacajao_calvus GATGAGTGTGGCAAGGCCCAAGCGGAAGTGCCG--GTTGCT
Chiropotes_israelita GATGAGTGTGGCAAGGCCCAAGCGGAAGTGCCG--GTTGCT
Chiropotes_satanas_chiro ?????????????????????????????????????????
Pithecia_irrorata GATGAGTGTGGCAAGGCCCAAGCGGAAGTGCCG--G?????
Pithecia_pithecia GATGAGTGTGGCAAGGCCCAAGCGGAAGTGCCG--GTTGCT
Tarsius_bancanus ?????????????????????????????????????????
Tarsius_syrichta ?????????????????????????????????????????
Lepilemur_ankaranensis AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Lepilemur_septentrionali AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Lepilemur_dorsalis AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Lepilemur_ruficaudatus AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Lepilemur_jamesi AACGAGTGTGGCAAGGCCCAGG???????????????????
Microcebus_murinus_subsp AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Microcebus_murinus_subsp ?????????????????????????????????????????
Mirza_zaza AACGAGTGTGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Cheirogaleus_medius ?????????????????????????????????????????
Propithecus_verreauxi_co ?????????????????????????????????????????
Propithecus_verreauxi AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Propithecus_tattersalli AACGAGTGTGGCAAGGCCCAGGCTGAAGTTCCG--GTTGCT
Propithecus_diadema AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Propithecus_edwardsi AACGAGTGTGGCAAGGCCCAGGCG?????????????????
Avahi_laniger AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Eulemur_rufus AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Eulemur_collaris AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Eulemur_fulvus AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Eulemur_albifrons AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Eulemur_sanfordi AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Eulemur_mongoz AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Eulemur_macaco AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Eulemur_macaco_flavifron AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Eulemur_coronatus AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Eulemur_rubriventer AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Hapalemur_occidentalis AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Hapalemur_griseus AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Lemur_catta AACGAGTGTGGCAAGGCCCAGGCGGAAGTTCCG--GTTGCT
Varecia_variegata_varieg AACGAGTGTGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Varecia_variegata_rubra AACGAGTGTGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Daubentonia_madagascarie ?????????????????????????????????????????
Nycticebus_bengalensis AACGAGTGTGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Nycticebus_coucang AACGAGTGTGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Nycticebus_pygmaeus AACGAGTATGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Loris_tardigradus AACGAGTGTGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Arctocebus_calabarensis AACGAGTGTGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Perodicticus_potto AACGAGTGTGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Otolemur_garnetti AACGAGTGTGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Otolemur_crassicaudatus AACGAGTGTGGCAAGGCCCAGGCAGAAGTTCCG--GTTGCT
Galago_moholi ?????????????????????????????????????????
Galago_senegalensis ?????????????????????????????????????????
Galago_thomasi AACGAGTGTGGCAAGGCCCAGGCG?????????????????
Galeopterus_variegatus GATGAGTGTGGCAAGGCCCAAGCAGAAGTTCCG--G?????
Cynocephalus_volans GATGAGTGTGGCAAGGCCCAAGCAGAAGTCCCG--GTTGCT
Tupaia_glis ?????????????????????????????????????????
Tupaia_minor ?????????????????????????????????????????
rabbit_rabbit_rabbit ?????????????????????????????????????????
"""#
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