Nano Hash - криптовалюты, майнинг, программирование

Обнаружение подстроки NSString

Мне нужна помощь с заменой вхождений строки на другую строку. Возникновение, которое необходимо обнаружить, на самом деле является какой-то функцией:

%nx+a or %nx-a

где x и a — некоторые числа.

Так, например, %n10+2 или %n54-11.

Я даже не могу использовать что-то вроде:
NSRange startRange = [snippetString rangeOfString:@"%n"];

потому что, если у меня есть два шаблона в одной строке, которую я проверяю, я получу только начальный диапазон первого...

Спасибо.


Ответы:


1

Я предполагаю, что вам нужно что-то сделать с этими двумя числами. Я думаю, что лучший способ — использовать регулярное выражение для извлечения того, что вам нужно за один раз.

NSString * string = @"some %n5-3 string %n11+98";
NSError * regexError = nil;
NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:@"%n(\\d+)([+-])(\\d+)"
                                                                        options:0
                                                                          error:&regexError];
NSArray * matches = [regex matchesInString:string options:0 range:NSMakeRange(0, string.length)];
for (NSTextCheckingResult * match in matches) {
    NSString * firstNumber = [string substringWithRange:[match rangeAtIndex:1]];
    NSString * secondNumber = [string substringWithRange:[match rangeAtIndex:3]];
    NSString * sign = [string substringWithRange:[match rangeAtIndex:2]];
    // Do something useful with the numbers.
}

Конечно, если вам просто нужно заменить все вхождения %n константной строкой, вы можете сделать это одним вызовом:

NSString * result = [string stringByReplacingOccurrencesOfString:@"%n\\d+[+-]\\d+"
                                                      withString:@"here be dragons"
                                                         options:NSRegularExpressionSearch
                                                           range:NSMakeRange(0, string.length)];

Отказ от ответственности: я не тестировал этот код. Могут присутствовать мелкие баги.

11.02.2014
  • Это круто. На самом деле я был довольно близок к использованию решения @Fogmeister, но раньше я не использовал NSRegularExpression, поэтому у меня были некоторые проблемы... я не использовал эти скобки, но теперь это имеет смысл. Большое спасибо!! 11.02.2014

  • 2

    Для чего-то подобного вы можете использовать NSRegularExpression и использовать метод enumerateMatches:.

    Или вы можете создать свой собственный цикл.

    Первый самый простой, если у вас есть правильный шаблон.

    Что-то типа...

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"%n" options:0 error:nil];
    
    NSString *string = @"%n10+2*%n2";
    
    [regex enumerateMatchesInString:string
    options:0
    range:NSMakeRange(0, string.length)
    usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
        // here you will get each instance of a match to the pattern
    }];
    

    Вам нужно будет проверить документы для NSRegularExpression, чтобы узнать, как делать то, что вам нужно сделать с этим.

    Документы... https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html

    11.02.2014

    3

    Измените этот код, чтобы он соответствовал вашим потребностям

    yourString = [yourString stringByReplacingOccurrencesOfString:@" +" withString:@" "options:NSRegularExpressionSearch range:NSMakeRange(0, yourString.length)]; 
    
    11.02.2014
  • Какая? Я не понимаю, как это поможет найти повторяющиеся экземпляры искомой подстроки. 11.02.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..