Regex 方法捕获swift正则表达式
Regex 方法捕获swift正则表达式,regex,swift,Regex,Swift,在这里,我试图找到一种方法来获取数组中的第二个单词,并创建了一个新列表,其中包含单词retrieve 这是数组 下面是一个我想要恢复的单词的示例 埃克斯特拉克拉萨 企业 沃克斯 梅卡尼克 果 等等 我想我已经创建了一个正则表达式,并为parthentèse恢复了第二个单词创建了一个空格 我发现这个方法与我的表达式相匹配,我询问是否有另一个方法使用单词select创建了一个新数组 这里是方法 let myStringToBeMatched = "ThisIsMyString"
在这里,我试图找到一种方法来获取数组中的第二个单词,并创建了一个新列表,其中包含单词retrieve
这是数组
下面是一个我想要恢复的单词的示例
- 埃克斯特拉克拉萨
- 企业
- 沃克斯
- 梅卡尼克
- 果
我想我已经创建了一个正则表达式,并为parthentèse恢复了第二个单词创建了一个空格 我发现这个方法与我的表达式相匹配,我询问是否有另一个方法使用单词select创建了一个新数组
这里是方法
let myStringToBeMatched = "ThisIsMyString"
let myRegex = "^This"
if let match = myStringToBeMatched.rangeOfString(myRegex, options: .RegularExpressionSearch){
println("\(myStringToBeMatched) is matching!")
}
我遇到了一个新问题:我尝试了解决方案该解决方案在alamofire方法之外运行良好:
let list = ["Orange", "Orange Ekstraklasa", "Orange (entreprise)", "Orange (Vaucluse)", "Orange mécanique", "Orange-Nassau", "Orange (fruit)", "Orange Cinémax", "Orange TV", "Orange Stinger"]
let results = list.map { split($0, {$0 == " " || $0 == "(" || $0 == ")"}) }
.filter { $0.count > 1 }
.map { $0[1] }
所以我适应了在alamofire工作
Alamofire.request(.GET, "http://fr.wikipedia.org/w/api.php", parameters: parameters)
.responseJSON { (_, _, data, _) in
let json = JSON(object: data!)
var list = json[1].arrayValue!
let results = list.map { split($0, {$0 == " " || $0 == "(" || $0 == ")"}) }
.filter { $0.count > 1 }
.map { $0[1] }
}
在我的变量results
中,它是我自己的,但作为错误:表达式太复杂,无法在合理的时间内解决;考虑将表达式分解成不同的子表达式< /代码>
感谢rangeOfString返回一个范围,您可以使用它创建一个新的字符串实例
let myStringToBeMatched = "ThisIsMyString"
let myRegex = "^This"
if let match = myStringToBeMatched.rangeOfString(myRegex, options: .RegularExpressionSearch){
let result = myStringToBeMatched[match]
println("\(result) is matching!")
}
我不明白为什么他告诉我这句话,我得到一个错误,如:
找不到成员“stringValue”
错误在println()处
下面是代码的其余部分
let json = JSON(object: data!)
let list: Array<JSON> = json[1].arrayValue!
var index:Int
for(index = 0 ; index < list.count ; index++) {
let myRegex = "\\((.*?)\\)"
if let match = json[1][index].stringValue?.rangeOfString(myRegex, options: .RegularExpressionSearch){
println(json[1][match].stringValue?)
}
}
let json=json(对象:数据!)
let list:Array=json[1]。arrayValue!
var指数:Int
对于(索引=0;索引
除了正则表达式,您还可以执行以下操作:
let list = ["Orange", "Orange Ekstraklasa", "Orange (entreprise)", "Orange (Vaucluse)", "Orange mécanique", "Orange-Nassau", "Orange (fruit)", "Orange Cinémax", "Orange TV", "Orange Stinger"]
let results = list.map { split($0, {$0 == " " || $0 == "(" || $0 == ")"}) }
.filter { $0.count > 1 }
.map { $0[1] }
这将为原始列表中的每个项目构建一个单词数组,过滤掉少于2个项目的单词,然后构建第二个项目的新数组
稍微不那么优雅,但可能效率更高
let results = list
.map {
(string) -> String! in
let words = split(string, {$0 == " " || $0 == "(" || $0 == ")"})
if words.count > 1 {
return words[1]
} else {
return nil
}
}
.filter { $0 != nil }
这将构建第二个单词的数组(如果只有一个单词,则为nil
),然后过滤掉nil
值
regex等价物为:
var error: NSError?
let regex = NSRegularExpression(pattern: "[\\w-]+", options: nil, error: &error)
let results = list
.map {
(string) -> String! in
let matches = regex?.matchesInString(string, options: nil, range: NSMakeRange(0, countElements(string))) as [NSTextCheckingResult]?
if matches?.count > 1 {
return (string as NSString).substringWithRange(matches![1].range)
} else {
return nil
}
}
.filter { $0 != nil }
如果您更喜欢传统的循环:
var results = [String]()
for string in list {
let words = split(string, {$0 == " " || $0 == "(" || $0 == ")"})
if words.count > 1 {
results.append(words[1])
}
}
或者,其regex等价物:
var error: NSError?
let regex = NSRegularExpression(pattern: "[\\w-]+", options: nil, error: &error)
var results = [String]()
for string in list {
let matches = regex?.matchesInString(string, options: nil, range: NSMakeRange(0, countElements(string))) as [NSTextCheckingResult]?
if matches?.count > 1 {
results.append((string as NSString).substringWithRange(matches![1].range))
}
}
你是在问如何检索正则表达式匹配的结果吗?我认为你的函数解决方案非常优雅!
var results = [String]()
for string in list {
let words = split(string, {$0 == " " || $0 == "(" || $0 == ")"})
if words.count > 1 {
results.append(words[1])
}
}
var error: NSError?
let regex = NSRegularExpression(pattern: "[\\w-]+", options: nil, error: &error)
var results = [String]()
for string in list {
let matches = regex?.matchesInString(string, options: nil, range: NSMakeRange(0, countElements(string))) as [NSTextCheckingResult]?
if matches?.count > 1 {
results.append((string as NSString).substringWithRange(matches![1].range))
}
}