gpt4 book ai didi

regex - 捕获快速正则表达式的方法

转载 作者:行者123 更新时间:2023-11-30 10:20:34 25 4
gpt4 key购买 nike


在这里,我尝试找到一种方法来获取数组的第二个单词,并使用单词检索创建一个新列表
这是数组

[Orange, Orange Ekstraklasa, Orange (entreprise), Orange (Vaucluse), Orange mécanique, Orange-Nassau, Orange (fruit), Orange Cinémax, Orange TV, Orange Stinger]

这是我想要恢复的单词的示例

  • Ekstraklasa
  • 企业
  • 沃克吕兹省
  • 机械
  • 水果

等等...


我想我已经创建了一个正则表达式,并且用一个空格来分隔第二个单词。

我发现这个方法与我的表达式匹配,我询问是否有另一种方法可以使用单词 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] }

}

在我的变量结果上,我自己但是错误:表达式太复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式

谢谢

最佳答案

除了正则表达式之外,您还可以执行以下操作:

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 值。

等价的正则表达式是:

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 }

如果您更喜欢传统的 for 循环:

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))
}
}

关于regex - 捕获快速正则表达式的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26828685/

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