2015-05-28 2 views
1

Я хочу найти строку подстроки, но допускаю различные, но похожие знаки пунктуации (включая пробелы).Строка поиска, но допускать разные, но похожие знаки пунктуации

Например, если у меня есть строка

@"this is a 'difficult' string to search" 

и я искать подстроки

@"a ‘difficult‘ string" 

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

Есть ли способ поиска, который допускает небольшие изменения, такие как это? Или мне нужно писать по-своему? И если мне придется писать по-своему, как мне это сделать?

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

двойные кавычки (например, U + 0022, U + 201C, U + 201D)

одиночные кавычки (U + 0027, U + 2018, U + 2019)

тире (U + 002D, U + 2010, U + 2011, U + 2012, U + 2013, U + 2014, U + 2015 (и т. Д.))

пробелы (U + 0020, U + 00A0 (и т. Д.))

т.д.

Так как я могу сделать что-то вроде

[myString rangeOfString:subString options:allowForSimilarPunctuation] 

До сих пор я изменяющая строки и подстроки, заменяя комбинацию символов и выполнение повторяющихся запросов, но это, кажется неуклюжим способом, должно быть умный способ сделать это?

+0

Я бы раздеться обе строки всех не буквенно-цифровых символов и не -пространствами. Затем выполните сравнение. – rmaddy

+0

Да, я собирался заявить в вопросе, что я это пробовал, но этот метод также дает положительные совпадения, когда пунктуация не очень похожа. Я бы хотел, чтобы он был более точным. Я предполагаю, что я мог бы заменить все пробелы «нормальными» пробелами и всеми двойными кавычками с одним типом двойных кавычек и т. Д. Это сработало бы, но это кажется немного неуклюжим, я хотел бы знать, как это сделать «правильно», – narco

ответ

1

Вы можете использовать классы символов:

@"a [‘']difficult[‘'] string" 

Вот пример на Regex101, если вы хотите, чтобы дать ему кружить: https://regex101.com/r/iZ6lQ8/1

+0

Интересно, я не знал, что это была возможность. Это все равно означало бы создание новой версии подстроки, которая по-прежнему кажется немного неуклюжей, но она кажется лучше, чем то, что я сейчас делаю (при условии, что она работает :)). Я мог бы просто создать категорию в NSString. Я дам это, если у меня не будет других вариантов в ближайшие несколько минут. – narco

+1

Прохладный. Я предоставил ссылку на инструмент онлайн-тестирования для выражения, если вы хотите, чтобы ваши руки были грязными с этим подходом. – Colin

+0

Спасибо, я дал вам голоса, но я собираюсь ответить на свой вопрос кодом в качестве принятого ответа, поэтому другие люди тоже могут его использовать :) – narco

Смежные вопросы