我有一个像这样的字符串......
var string = "A12345678B119292A88B2222A883849B123"
---> (var string =
"
A 12345678
B 119292
A 88
的乙 2222
的 A 883849
的乙 123
“)
...并且喜欢将字符串拆分为以'A'开头并以' B '结尾的特定组,以获得如下结果:
resultArray: "12345678", "88", "883849"
这是我到目前为止所发现的:
func matches(for regex: String, in text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex)
let results = regex.matches(in: text,
range: NSRange(text.startIndex..., in: text))
return results.map {
String(text[Range($0.range, in: text)!])
}
} catch let error {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
let string = "A12345678B119292A88B2222A883849B123"
let pattern = "\\.*A.*B" // pattern error
let array = matches(for: pattern, in: string)
print(array)
[?]
如何使用regex和Swift实现此结果?
答案 0 :(得分:1)
你可以通过“积极的外观/前瞻”实现这一目标 (比较Lookahead and Lookbehind Zero-Length Assertions):
let string = "A12345678B119292A88B2222A883849B123"
let pattern = "(?<=A).*?(?=B)"
let array = matches(for: pattern, in: string)
print(array)
// ["12345678", "88", "883849"]
模式匹配任意字符序列, 之前是“A”,后跟“B”。
另请注意使用方法
“非贪婪”模式.*?
,否则你会得到
第一个“A”和最后一个“B”之间的单个匹配。
答案 1 :(得分:0)
除非您有其他示例,否则您可以使用
(?<=A)\d+(?=B)
<小时/>
请注意,您需要双重转义反斜杠,因此您需要改为编写(?<=A)\\d+(?=B)
。