gpt4 book ai didi

regex - 如何在 NSRegularExpression 中找到匹配的组

转载 作者:行者123 更新时间:2023-11-28 13:14:52 25 4
gpt4 key购买 nike

我有一个包含多个捕获组的正则表达式语句,这些捕获组由 | 分隔运算符(operator)。如何找出匹配的捕获组?对于这个例子,我能想到的唯一方法是计算匹配的字符数。

var string = "1234567897"
var pattern = "(^\\d{9}$)|(^\\d{10}$)|(^\\d{13}$)|(^[a-zA-Z]{2}\\d{9}[a-zA-Z]{2}$)"

var myRegex = NSRegularExpression(pattern: pattern, options: nil, error: nil)!

if let myMatch = myRegex.firstMatchInString(string, options: nil,
range: NSRange(location: 0, length: string.utf16Count)) {
println((string as NSString).substringWithRange(myMatch.rangeAtIndex(0)))

}

最佳答案

我写了一段适用于我的示例的代码。我相信它可以写成更好的方式,但它现在有效。

swift 2.3

var string = "123456789"
var pattern = "(^\\d{9}$)|(^\\d{10}$)|(^\\d{13}$)|(^[a-zA-Z]{2}\\d{9}[wW]{2}$)"

var myRegex = try! NSRegularExpression(pattern: pattern, options: [])

if let myMatch = myRegex.firstMatchInString(string, options: NSMatchingOptions.init(rawValue: 0), range: NSRange(location: 0, length: string.utf16.count)) {
var matchedGroup = 0

for var i in 1..<myMatch.numberOfRanges {
if myMatch.rangeAtIndex(i).length != 0 {
matchedGroup = i
break
}

}
print(matchedGroup)
print((string as NSString).substringWithRange(myMatch.rangeAtIndex(0))) //whatever the range you want to print

}

swift 3

var string = "123456789"
var pattern = "(^\\d{9}$)|(^\\d{10}$)|(^\\d{13}$)|(^[a-zA-Z]{2}\\d{9}[wW]{2}$)"

var myRegex = try! NSRegularExpression(pattern: pattern, options: [])

if let myMatch = myRegex.firstMatch(in: string, options: NSRegularExpression.MatchingOptions.init(rawValue: 0), range: NSRange(location: 0, length: string.utf16.count)) {
var matchedGroup = 0

for var i in 1..<myMatch.numberOfRanges {
if myMatch.rangeAt(i).length != 0 {
matchedGroup = i
break
}

}
print(matchedGroup)
print((string as NSString).substring(with: myMatch.rangeAt(0))) //whatever the range you want to print

}

关于regex - 如何在 NSRegularExpression 中找到匹配的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29396068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com