ajam sunasara Ответов: 5

Заменить \r\n из двойных кавычек в C#


привет,

вот моя входная строка :

"Амит","30122018","1234567890","пожалуйста, введите правильную дату"возврата каретки и перевода строки
"Пунит","30122018","abcd123457","пожалуйста, введите правильную дату возврата каретки и перевода строки
Эти символы не экранируются
**Эти символы не экранируются
пожалуйста, исправьте мобильный номер нет, недействительные записи"CRLF

//конец входной строки

Ожидаемая строка:

"Амит","30122018","1234567890","пожалуйста, введите правильную дату"возврата каретки и перевода строки
"punit","30122018","abcd123457","пожалуйста, укажите правильную дату

**
пожалуйста, исправьте мобильный номер нет, недействительные записи"CRLF

//конце строки

Примечание : никаких сторонних инструментов нет

Спасибо,
Азам

Что я уже пробовал:

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

5 Ответов

Рейтинг:
29

OriginalGriff

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

На данный момент данные, которые вы предоставляете, противоречивы: Вы показываете некоторые символы CRLF, но ваш текст по мере необходимости содержит "невидимые" новые строки:

"amit","30122018","1234567890","please insert correct date"CRLF
"punit","30122018","abcd123457","please insert correct date 

**
please correct mobile no, invalid records"CRLF
Вы показываете две пары CRLF, но внутри вашей конечной строки есть три "скрытых" (потому что без них ваши данные выглядели бы так:
"amit","30122018","1234567890","please insert correct date"
"punit","30122018","abcd123457","please insert correct date **please correct mobile no, invalid records"
Всего две новые строки - по одной в конце каждой строки.
Поэтому начните с рассмотрения данных в виде потока байтов (например, с помощью шестнадцатеричного редактора) и определите, что именно вы вводите. Затем точно решите, каким должен быть ваш двоичный вывод. Как только вы это выясните, процесс должен быть довольно тривиальным: скопируйте до первых двойных кавычек, затем найдите подходящую цитату: удалите ненужные новые строки между ними. Повторите до конца строки.

Это довольно тривиальный одиночный цикл для кода!


Рейтинг:
20

ajam sunasara

Привет, спасибо за ответ

строка s =регулярное выражение.Заменить(Данным, "\"[^\"]*(?:\"\"[\^"]*)*\"", м =&ГТ; м. Значение.Заменить("\r", "").заменить("\n",""))

это было решено мои проблемы

Спасибо,
азам


Рейтинг:
0

George Swan

Я, как правило, чтобы избежать Regex если это вообще возможно, так как он медленный и использует запутанный и непрозрачный синтаксис. Если вы хотите удалить CRLF из цитируемого текста и заменить его пробелом, вы можете сделать что-то вроде следующего.

public static string RemoveQoteEmbededCRLF(string text)
{
    bool isQuoted = false;
    StringBuilder sb = new StringBuilder();
    for (int i=0;i<text.Length;i++)
    {
        char c = text[i];
        //look for '"' if found toggle isquoted
        if (c == '"') isQuoted = !isQuoted;
        //if CR found inside quoted text
        if(c=='\r'&& isQuoted&&i <text.Length-1)
        {
            //See if LF is next char
            if (text[i+1]=='\n')
            {
                //CRLF found, replace with space
                c = ' ';
                //step over LF
                i += 1;
            }
        }
        sb.Append(c);
    }
    return sb.ToString();
}