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

4
这是一篇关于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中提取2044


你可以跳过分组,使用正向零宽断言和反向零宽断言 (?<=\w{2})\w(?=\w) - Daniel Gimenez
@DanielGimenez在这种情况下不起作用(没有额外的清洁),因为OP想要从“2014-10-29T20:44:00”中得到2044 - Sam
@Sam的问题在我的帖子之后被编辑了。 - Daniel Gimenez
2个回答

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 或 : 分隔的子字符串数组,并且我获取返回的数组中第二个和第三个元素中的小时和分钟。

如果字符串是"PT1H22M33S",我该如何获取时间,即小时/分钟/秒? - iMemon

0

以下是使用正则表达式字面量在 Swift 5.7 中的答案:

if let match = try /\w{2}(\w)\w/.wholeMatch(in: "REGX") {
    print("Found a match with \(match.1)") // prints 'G'
}

match.1 是第一个捕获组中的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接