因为你使用的是一个捕获组,所以我假设这是你正在寻找的字符串。您可以将表达式更改为:
^.{0,6}\\s{1,3}(---+)\\s*
. 我添加了以下内容:
-
^
字符串的开头。
-
.{0,6}
从零到六个字符的匹配。
这样更改表达式将匹配您要查找的内容,如果原始表达式最多开始于位置,则将匹配
6个
,这是您的
最大值
. 不同之处在于,整个匹配项包含这些可选字符,但第一个捕获组将只包含您要查找的破折号。
我在操场上使用以下代码测试新表达式:
let regexString = "^.{0,6}\\s{1,3}(---+)\\s*"
let regex = try? NSRegularExpression(pattern: regexString)
let string = "Space --- the final frontier --- these are the voyages of the
starship Enterprise. Its continuing mission: to explore strange
new worlds. To seek out new life and new civilizations. To boldly
go where no one has gone before!"
let matches = regex?.matches(in: string, options: [], range: NSRange(location: 0, length: string.count))
if let firstMatch = matches?.first {
print("Whole regex match starts at index: \(firstMatch.range.lowerBound)")
print("Whole match: \(String(string[Range(firstMatch.range, in: string)!]))")
print("Capture group start at index: \(firstMatch.range(at: 1).lowerBound)")
print("Capture group string: \(String(string[Range(firstMatch.range(at: 1), in: string)!]))")
} else {
print("No matches")
}
运行上面的代码将显示以下结果:
整个正则表达式匹配从索引0开始
整体匹配:空间---
捕获组从索引开始:6
捕获组字符串:---
如果
string
变化是这样的吗:
let string = "The space --- the final frontier --- these are the ...
结果是:
没有匹配项
自从
\\s{1,3}
从索引开始
10个
.
希望这对你有用。