Swift - 匹配括号的正则表达式

Swift - Regular Expression to match parentheses

我正在尝试使用正则表达式搜索字符串:"K1B92 (D) [56.094]",我想获取 "(D)",包括 "D" 周围的括号。我无法找到与实际括号匹配的正确表达式,因为简单地放置括号会将其作为一个块并尝试使用 "\" 转义括号,使其认为它是一个要计算的表达式。我也试过用 "\(" 转义 "\(""\([ABCD])\)" 但没有运气。这是我一直在使用的代码:

let str = "K1B92 (D) [56.094]"

let regex = NSRegularExpression(pattern: "\b\([ABCD])\)\b", options: NSRegularExpressionOptions.CaseInsensitive, error: nil)

let match = regex?.firstMatchInString(str, options: NSMatchingOptions.WithoutAnchoringBounds, range: NSMakeRange(0, count(str)))

let strRange = match?.range
let start = strRange?.location
let length = strRange?.length

let subStr = str.substringWithRange(Range<String.Index>(start: advance(str.startIndex, start!), end: advance(str.startIndex, start! + length!)))

// "\b\([ABCD])\)\b" returns range only for the letter "D" without parentheses.
// "\b\([ABCD])\)\b" returns nil

请指导我正确的表达方式?非常感谢。

\([ABCD])\)部分可以, 更正: 正如@vacawama 在他的回答中正确地说的那样,括号 不匹配这里。 \([ABCD]\) 匹配字母 A-D 之一 括在括号中。

另一个问题是没有字边界\b 模式)在 space 和括号之间。

所以您可以(根据您的需要)删除 \b 模式,或者将它们替换为 \s 白色 space:

let regex = NSRegularExpression(pattern: "\s\([ABCD]\)\s", ...

但是因为匹配的字符串不应该包含你需要的 space 捕获组:

let regex = NSRegularExpression(pattern: "\s(\([ABCD]\))\s", ...
// ...
let strRange = match?.rangeAtIndex(1)

您需要的正则表达式是"\([ABCD]\)"。在开括号 ( 和闭括号 ).

之前,您需要双重转义 \