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