Swift正则表达式 - 如何提取匹配的组

时间:2014-10-29 20:32:07

标签: regex swift

这是关于Swift中正则表达式的问题。我找到了各种教程,提到了如何进行搜索和匹配,但没有关于分组的内容:

这是一个简单的匹配声明:

if Regex("\\w{4}").test("ABCD") {
  println("matches pattern")
}

但如果我想提取第3个字母怎么办:

if Regex("\\w{2}(\\w)\\w").text("REGX") {
   print("Found a match with \$1")
}

打印匹配组的正确语法是什么?

或更具体地说 - 如何从2014-10-29T20:44:00

中提取 2044

1 个答案:

答案 0 :(得分:12)

您可以使用NSRegularExpression

var pattern = ".+T(\\d\\d):(\\d\\d).+"
var string = "2014-10-29T20:44:00"

var error: NSError? = nil

var regex = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.DotMatchesLineSeparators, error: &error)


var result = regex?.stringByReplacingMatchesInString(string, options: nil, range: NSRange(location:0,
    length:countElements(string)), withTemplate: "$1$2")

我倾向于在没有正则表达式的情况下这样做:

var charSet = NSCharacterSet(charactersInString: "T:") 

var array =
string.componentsSeparatedByCharactersInSet(charSet) 

var result2 =
"\(array[1])\(array[2])"

这会将日期时间字符串分解为由T或:分隔的子字符串数组,并且我在返回数组的第二个和第三个元素中得到小时和分钟。