2014-10-29 38 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