Соответствует всем подстрокам в строке кроме определенного образца - PullRequest
2 голосов
/ 06 июня 2019

в этой строке: «ТЕСТИРОВАНИЕ (привет) 123 (КАК ВЫ)»

Я бы хотел соответствовать:

TESTING
123

Пожалуйста, помогите .. спасибо!

Я могу использовать только (\\\(.*?\)) для сопоставления \(hello) и \(HOW ARE YOU), как я могу сопоставить аналог этой строки?

1 Ответ

1 голос
/ 06 июня 2019

Невозможно с помощью регулярного выражения ICU (библиотеки регулярных выражений, используемого в Swift) сопоставить фрагмент текста, который не равен какой-либо строке из нескольких символов. Вы можете сделать это, если хотите найти 1 или более символов, отличных от определенного символа. Вы не можете сделать это, если вы «отрицаете» целую последовательность символов.

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

let str = "TESTING \\(hello) 123 \\(HOW ARE YOU)"
let pattern = "\\s*\\\\\\([^()]*\\)\\s*"
let result = str.replacingOccurrences(of: pattern, with: "\0", options: .regularExpression)
print(result.components(separatedBy: "\0").filter({ $0 != ""}))

Выход: ["TESTING", "123"]

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

Детали шаблона

  • \s* - 0+ пробелов
  • \\\( - подстрока \(
  • [^()]* - 0+ символов кроме ( и )
  • \) - ) char
  • \s* - 0+ пробелов.

Результаты могут содержать пустые строки, поэтому для их фильтрации используется .filter({ $0 != ""}).

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