函数查找swift中字符串中字符串的所有nsrange

函数查找swift中字符串中字符串的所有nsrange,swift,nsrange,Swift,Nsrange,我想在DNA序列(字符串)中有所有红色CG字母对。我可以通过使用NSMutableAttributeString来实现。 为此,我需要所有CG位置的NSRANGE,我已尝试使用以下函数,但不在同一行中 indexesOfStringIn = (stringOut as NSString).rangeOfString(stringIn, options: 0, range: rangeForIndexStringIn) 不能使用类型为(字符串,选项:Int,范围:NSRange)的参数列表调用

我想在DNA序列(字符串)中有所有红色CG字母对。我可以通过使用NSMutableAttributeString来实现。 为此,我需要所有CG位置的NSRANGE,我已尝试使用以下函数,但不在同一行中

indexesOfStringIn = (stringOut as NSString).rangeOfString(stringIn, options: 0, range: rangeForIndexStringIn) 
不能使用类型为(字符串,选项:Int,范围:NSRange)的参数列表调用rangeOfString with range。哪里有错误?我做错了什么

func searchForNSRangesOfStringInString(stringOut: String, stringIn: String) -> [NSRange]

{
    var arrayOfindexesOfStringIn = [NSRange]()

if stringIn.characters.count > 1
{
    var rangeNS = (stringOut as NSString).rangeOfString(stringIn)

    if rangeNS.location != NSNotFound
    {
        let endIndexOfStringOut = (stringOut as NSString).length - 1
        var indexesOfStringIn = (stringOut as NSString).rangeOfString(stringIn)
        arrayOfindexesOfStringIn = [indexesOfStringIn]
        var lastIndexOfStringIn = (stringOut as NSString).rangeOfString(stringIn).location
        var rangeForIndexStringIn = NSRange(lastIndexOfStringIn...endIndexOfStringOut)

        while indexesOfStringIn.location != NSNotFound
        {
            indexesOfStringIn = (stringOut as NSString).rangeOfString(stringIn, options: 0, range: rangeForIndexStringIn)

            if indexesOfStringIn.location != NSNotFound
            {

                arrayOfindexesOfStringIn.append(indexesOfStringIn)

                lastIndexOfStringIn = (stringOut as NSString).rangeOfString(stringIn, options: 0, range: rangeForIndexStringIn).location

                rangeForIndexStringIn = NSRange(lastIndexOfStringIn...endIndexOfStringOut)

            }
        }
    }
}
return arrayOfindexesOfStringIn
} 

正如Uchiugaka所建议的,使用NSRegularExpression以字符串形式返回匹配范围数组要容易得多,如下所示:

extension String {
    func findOccurencesOf(text text:String) -> [NSRange] {
        return !text.isEmpty ? try! NSRegularExpression(pattern: text, options: []).matchesInString(self, options: [], range: NSRange(0..<characters.count)).map{ $0.range } : []
    }
}

let str = "CGCGCGCGCG"

let ranges = str.findOccurencesOf(text: "CG")

print(ranges.count)   // 5
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        textField.addTarget(self, action: "coloring:", forControlEvents: UIControlEvents.EditingChanged)
        textField.becomeFirstResponder()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func coloring(sender:UITextField) {
        let attText = NSMutableAttributedString(string: sender.text ?? "")
        let ranges = sender.text!.uppercaseString.findOccurencesOf(text: "CG")
        for range in ranges {
            attText.addAttributes([NSForegroundColorAttributeName : UIColor.redColor()], range: range)
        }
        sender.attributedText = attText
    }

}

extension String {
    func findOccurencesOf(text text:String) -> [NSRange] {
        return !text.isEmpty ? try! NSRegularExpression(pattern: text, options: []).matchesInString(self, options: [], range: NSRange(0..<characters.count)).map{ $0.range } : []
    }
}
扩展字符串{
func findOccurencesOf(文本:字符串)->[NSRange]{
return!text.isEmpty?尝试!NSRegularExpression(模式:text,选项:[])。匹配安装(self,选项:[],范围:NSRange(0..[NSRange]{

return!text.isEmpty?尝试!NSRegularExpression(模式:text,选项:[])。匹配安装(self,选项:[],范围:NSRange(0..只需使用NSRegularExpressionOk,但我的代码中有什么错误?可能很简单,但我被卡住了。谢谢,这是一个很好的解决方案,可能我会在最后使用它!我正在学习过程中,所以我无法理解为什么rangeOfString with range是错误的,而NSString应该是正确的,这让我迷路了:(.什么意思[]在选项中:?的意思与nil=no options相同它是一个空选项集!!!我以前使用过nil,但它不正确。当我开始在rangeOfString的选项中使用[]时(stringIn,options:[],range:RangeForIndexString),我看不到更多的抱怨!