2014-10-29 81 views
4

这是一个关于Swift中正则表达式的问题。我发现,提到如何做搜索和匹配,但没有关于分组的各种教程:Swift正则表达式 - 如何提取匹配组

下面是一个简单的匹配声明:

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

但如果我想提取第三个字母:

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

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

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

+0

您可以跳过这些组并使用后面的内容并向前看'(?<= \ w {2})\ w(?= \ w)'。 – 2014-10-29 20:34:49

+0

@DanielGimenez不会在这种情况下工作(没有额外的清理),因为OP需要'2014-10-29T20:44:00'的'2044'。 – Sam 2014-10-29 20:44:16

+0

@Sam问题在我的文章后编辑 – 2014-10-30 13:07:50

回答

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或分开的子字符串数组:和我在小时和分钟返回数组的第二个和第三个元素。

+0

如果字符串类似“PT1H22M33S”,我如何获得时间i-e hr/min/sec? – iMemon 2014-12-17 09:35:06