Swift заменяет вхождение строки условием

У меня есть строка, как показано ниже

<p><strong>I am a strongPerson</strong></p>

Я хочу скрыть эту строку, как это

<p><strong>I am a weakPerson</strong></p>

Когда я пытаюсь ниже код

let old = "<p><strong>I am a strongPerson</strong></p>"
let new = old.replacingOccurrences(of: "strong", with: "weak")
print("\(new)")

Я получаю вывод, как

<p><weak>I am a weakPerson</weak></p>

Но мне нужен вывод, как это

<p><strong>I am a weakPerson</strong></p>

Мое состояние здесь

1. Он должен быть заменен только в том случае, если слово не содержит таких HTML-тегов, как "<>".

Помоги мне получить это. Заранее спасибо.

2 ответа

Решение

Вы можете использовать регулярное выражение, чтобы избежать попадания слова в тег:

let old = "strong <p><strong>I am a strong person</strong></p> strong"
let new = old.replacingOccurrences(of: "strong(?!>)", with: "weak", options: .regularExpression, range: nil)
print(new)

Я добавил несколько дополнительных слов "сильный", чтобы протестировать крайние случаи.

Хитрость заключается в использовании (?!>) что в основном означает игнорировать любое совпадение, которое имеет > в конце этого. Посмотрите на документацию для NSRegularExpression и найдите документацию для "негативного прогнозного утверждения".

Выход:

слабый

я слабый человек слабый

Попробуйте следующее:

let myString = "<p><strong>I am a strongPerson</strong></p>"
if let regex = try? NSRegularExpression(pattern: "strong(?!>)") {

 let modString = regex.stringByReplacingMatches(in: myString, options: [], range: NSRange(location: 0, length:  myString.count), withTemplate: "weak")
  print(modString)
}
Другие вопросы по тегам