Как разделить строку, используя некоторые условия и разделитель - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть [Строка], которая выглядит как

ABC, JKL, 123,12, PQR

ABC, "XY, Z", 654,54, PQR

Полученный массив должен выглядеть следующим образом:

["ABC", "JKL", "123", "12", PQR], ["ABC",«XY, Z», «654», «54», «PQR»]

Это то, что я уже пробовал, но это не работает, как я хочу в случае второго элемента:

content.components(separatedBy: "\n").map{ $0.components(separatedBy: ",") }

1 Ответ

0 голосов
/ 27 сентября 2019

Идея, лежащая в основе решения:

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

ToДля этого вам нужно использовать глобальную split функцию с шаблоном регулярных выражений .

Пример кода:

extension String
{
  func splitCommas() -> [Stirng] {
    let pattern = ",(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*\$)" //regex pattern for commas that are not within quotes
    if let regex = try? NSRegularExpression(pattern: pattern, options: []) {
      let string = self as NSString
      return regex.matches(in:inputString, range: NSMakeRange(0, inputString.utf16.count)).map {
        string.substring(with: $0.range).replacingOccurrences(of: ",", with: "") //removing all instances of commas
      }
    }
    return []
  }
}

Надеюсь, это поможет!;)

Обновления

Обновлен код до более современного примера.

Также реализована функция как расширение String для удобства использования во всех переменных String.

...