正则表达式,列表中的组元素

时间:2016-01-04 10:06:41

标签: regex swift

我正在解析一个html页面 - 将其转换为完整的字符串 - 而我得到的是一个列表,我可以将其拆分为多个部分。这就是我的意思:

chemestry    // subject name

21/10        // date of the exam

6+           // value of the first mark

25/12        // date of the second exam

8            // value of the second mark

physics      // subject name [and so on...]

27/11

10

我正在构建的应用程序将显示表示每个主题的tableview,如果单击一个单元格,用户将看到他在该特定主题中获得的标记列表。

我需要做的是让“编译器”知道字符串代表主题名称,用“ / ”分隔的两个整数代表商标的日期和单个整数(最后后跟+或 - )是标记的值。此外,每次编译器遇到一个新字符串时,它都意味着正在解析一个新的不同主题。

我怎样才能做到这一点?非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

试试这个正则表达式:

func regMatchGroup(regex: String, text: String) -> [[String]] {

do {
    var resultsFinal = [[String]]()
    let regex = try NSRegularExpression(pattern: regex, options: [])
    let nsString = text as NSString
    let results = regex.matchesInString(text,
        options: [], range: NSMakeRange(0, nsString.length))
    for result in results {
        var internalString = [String]()
        for var i = 0; i < result.numberOfRanges; ++i{
            internalString.append(nsString.substringWithRange(result.rangeAtIndex(i)))
        }
        resultsFinal.append(internalString)
    }
    return resultsFinal
   } catch let error as NSError {
       print("invalid regex: \(error.localizedDescription)")
       return [[]]
   }
}
// USAGE:
let string = "Add \"ABC\" \"ABD\""
let matches = regMatchGroup("\"([^\"]+)\"", text: string)
if (matches.count > 0) // If we have matches....
{ 
    print(matches[0][1]) //  Print the first one, Group 1.
}

Regular expression visualization

DEMO:https://regex101.com/r/eM3mD4/2