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]\)"
。在开括号 (
和闭括号 )
.
之前,您需要双重转义 \
我正在尝试使用正则表达式搜索字符串:"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
请指导我正确的表达方式?非常感谢。
更正: 正如@vacawama 在他的回答中正确地说的那样,括号
不匹配这里。 \([ABCD])\)
部分可以,\([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]\)"
。在开括号 (
和闭括号 )
.
\