import Foundation
let pattern = #"\[(?<id>\w)]\s*(?!\[\w])(?<content>.+)"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
[I]LK0001
[Q]我国现行法律体系中专门针对无线电管理的最高法律文件及其立法机关是:
[A]中华人民共和国无线电管理条例,国务院和中央军委
[B]中华人民共和国无线电管理办法,工业和信息化部
[C]中华人民共和国电信条例,国务院
[D]中华人民共和国业余无线电台管理办法,工业和信息化部
[P]LK0001.jpg
[I]LK0146
[Q][Q]我国在VHF和UHF范围内分配给业余业务和卫星业余业务与其他业务共用并设业务类别为主要业务与次要业务,以下那些频率分配给业余业务和卫星业余业务与其他业务共用并且业余业务和卫星业余业务作为主要业务:
[A]50MHz、144MHz
[B]144MHz、430MHz
[C]50MHz、430MHz
[D]220MHz、430MHz
[P]
[I]LK0110
[Q]业余电台违反无线电管制命令和无线电管制指令的,可以依法规受到下列处罚:
[A] 责令改正;拒不改正的,关闭、查封、暂扣或者拆除相关设备;情节严重的,吊销电台执照;违反治安管理规定的,由公安机关处罚
[B] 处警告或者三万元以下的罚款
[C] 处警告或者一千元以上,五千元以下的罚款
[D] 责令改正;并开除业余无线电协会会籍、罚没无线电通信设备
[P]
[I]LK0129
[Q]发射类别(class of emission)是指用标准符号标示的某发射的一组特性,例如主载波调制方式,调制信号,被发送信息的类型以及其他适用的信号特性。表示用单边带话传输的RTTY信号的发射类别是:
[A]F2B
[B]A1A
[C]J3E
[D]G2B
[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