Объедините множественные замещающие свойства () с помощью Swift - PullRequest
1 голос
/ 06 апреля 2020

У меня есть строка, я хотел бы добавить обратную косую черту sh, чтобы указать c символов , потому что я использую уценку и не использую палочки для добавления стиля, который не нужен.

Я пытался создать функцию, и она работает, но она неэффективна, я думаю:

func escapeMarkdownCharacters(){
      let myString = "This is #an exemple #of _my_ * function"
      var modString = myString.replacingOccurrences(of: "#", with: "\\#")
      modString = modString.replacingOccurrences(of: "*", with: "\\*")
      modString = modString.replacingOccurrences(of: "_", with: "\\_")
      print(modString) // Displayed: This is \#an exemple \#of \_my\_ \* function 
}

Я хотел бы иметь только один «replacecccurences», который работает для нескольких символов . Я думаю, что мог бы сделать это с помощью регулярных выражений, но я не понял, как. Если у вас есть идея, пожалуйста, поделитесь ею со мной.

1 Ответ

2 голосов
/ 06 апреля 2020

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

var modString = myString.replacingOccurrences(of: "[#*_]", with: "\\\\$0", options: [.regularExpression])

С необработанным строковым литералом:

var modString = myString.replacingOccurrences(of: "[#*_]", with: #"\\$0"#, options: [.regularExpression])

Результат: This is \#an exemple \#of \_my\_ \* function

Аргумент options: [.regularExpression] включает поиск по регулярному выражению mode.

Шаблон [#*_] соответствует #, * или _, а затем каждое совпадение заменяется обратным слэсом sh (\\\\) и значением соответствия ($0). ). Обратите внимание, что обратная черта sh должна быть удвоена в строке замены, потому что обратная черта sh имеет особое значение внутри шаблона замены (ее можно использовать, чтобы сделать $0 литеральную строку, когда $ предшествует обратная черта * * тысяча двадцать пять).

...