Удалить пробелы до и после

  • Автор темы Автор темы soprano
  • Дата начала Дата начала

soprano

Client
Регистрация
25.08.2011
Сообщения
1 032
Реакции
1 265
Баллы
113
Встал вопрос удалить в полученном значении пустые строки до и после него
C#:
Развернуть Свернуть Копировать
125
Пробовал такие способы (нагуглил) - ничего не помогло
C#:
Развернуть Свернуть Копировать
        string Quantity = Active.FindElementByXPath("//span[@class='quantity']", 0).InnerHtml.Trim().HtmlDecode();
          
        Quantity = Regex.Replace(Quantity, @"^\s*$\n|\r", string.Empty, RegexOptions.Multiline).TrimEnd();
        Quantity = Regex.Replace(Quantity, @"( |\t|\r?\n)\1+", "$1");
        Quantity = Quantity.Replace("\r\n\r\n", "\r\n");
        Quantity = Regex.Replace(Quantity, @"^\r?\n?$", "", RegexOptions.Multiline);
        Quantity = Regex.Replace(Quantity, @"^\s*(\r\n|\Z)", "", RegexOptions.Multiline);
        Quantity = Quantity.Replace(@"/\r\n+|\r+|\n+|\t+/i", "").Replace(@"^$", "");
        Quantity = Quantity.Replace("\r\n", "");

Кто поможет найти решение?
 
кубик trim пробовали?
 
71629
 
Trim удаляет пробелы, а у меня пустая строка перед значением и после него.
 
В справке так пишется это да, но он так же удаляет и пустые строки.
Нифига он не образает. Там в коде куча Trim - и строки не удалил.
Я сделал так, поскольку у меня цифры в переменной
C#:
Развернуть Свернуть Копировать
        int pg = int.Parse(Quantity);
        Quantity = Convert.ToString(pg);
и никаких пустых строк.
Но хотелось бы регулярку или еще вариант какой, если будет не цифра.
 
Нифига он не образает. Там в коде куча Trim - и строки не удалил.
Можете привести свой исходник содержания переменной, при котором не срабатывает Trim?
Trim строки должен удалять также.

71639



71638
 
Вот такой код
C#:
Развернуть Свернуть Копировать
Quantity = Active.FindElementByXPath("//span[@class='quantity']", 0).InnerHtml.Trim().HtmlDecode();
получается так
71652
 
Скиньте пожалуйста значение которое нужно очистить, не скриншот, а текстом!
 
Может сначала HtmlDecode(), а потом Trim() сделать
 
  • Спасибо
Реакции: soprano
Файл выше выложил.
Без разницы где HtmlDecode() ставить.
 
Попробуй следующей строкой еще раз обрезать:
Quantity = Quantity.Trim();

или взять InnerText вместо InnerHtml:
Quantity = Active.FindElementByXPath("//span[@class='quantity']", 0).InnerText.Trim();
 
InnerText - показывает нет такого элемента.
Trim второй раз ничего не даёт.
 
В общем в качестве альтернативы, попробуйте выдернуть регулярку из моего варианта php.
PHP:
Развернуть Свернуть Копировать
preg_replace('#[^А-ЯЁа-яёa-zA-Z0-9\!\@\"\#\№\$\;\%\:\^\&\?\*\(\)\-\_\+\=\|\{\}\[\]\,\.\<\>\'\ \\\/]#u', '', $str);
Иногда бывает при парсинге попадаются не стандартные символов юникода.
 
я не понимаю всей этой темы :-) а что вообще происходит ?

71657


вот таблица, которую скинули. нормально трим отрабатывает :)

71659
 
  • Спасибо
Реакции: inilim
  • Спасибо
Реакции: soprano
71672


или

Удаление лишних пробелов:
Развернуть Свернуть Копировать
return Regex.Replace(project.Variables["text"].Value, @"\s{2,}", " ", RegexOptions.IgnoreCase).Trim();
 
Последнее редактирование:
Удаление лишних пробелов:
Развернуть Свернуть Копировать
return Regex.Replace(project.Variables["text"].Value, @"\s{2,}", " ", RegexOptions.IgnoreCase).Trim();
При парсинге в цикле не обрезает пустые строки снизу и сверху.
Нормально получается только с конвертацией
C#:
Развернуть Свернуть Копировать
        int pg = int.Parse(Quantity);
        Quantity = Convert.ToString(pg);
 
При парсинге в цикле не обрезает пустые строки снизу и сверху.
Нормально получается только с конвертацией
C#:
Развернуть Свернуть Копировать
        int pg = int.Parse(Quantity);
        Quantity = Convert.ToString(pg);

значит там не только пробелы, а также табы и коретки))) регулярка [\t{1,}|\r{1,}|\s{2,}]
 
Последнее редактирование:
  • Спасибо
Реакции: soprano
  • Спасибо
Реакции: Hartwell и soprano
C#:
Развернуть Свернуть Копировать
1
вот файл
https://www.sendspace.com/file/l6li72
значение в колонке Е

Зачем вы так любите все усложнять.


с#:
Развернуть Свернуть Копировать
// создаем переменные проекта: nameproduct и description


// посложнее но с ценой и другой инфоц по ссылке забирается тут
// https://napi.wildberries.ru/api/catalog/9640734/detail.aspx?targetUrl=XS

// для кода ниже (только не забыть про другие json ключи и тд, заменив ссылку просто получим много ошибок.

//  string url = $"https://napi.wildberries.ru/api/catalog/{article}/detail.aspx?targetUrl=XS";



string article = "9640734"; //project.Variables["article"].Value; //можно переменной заменить

string url = $"https://wbcard.wildberries.ru/v1/product/{article}";
    string responseItem = ZennoPoster.HttpGet(
    url, "", "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    25000,
    string.Empty, project.Profile.UserAgent, true, 5,
        AdditionalHeaders: new[] {
        "Content-Type: application/json; charset=utf-8"
        }
    );

project.Json.FromString(responseItem); // разбираем json можно увидеть на вкладке где переменные и тд

// обращаеся к элементам которые видим во вкладке Json по левой стороне
// brandName, name, ver, description и так далее
// добавляем к ключам выше конструкцию project.Json.КЛЮЧ  (project.Json.name; project.Json.brandName;)


// присваиваем переменной nameproduct значение из json по ключу name
string nameproduct = project.Json.name;

// можем работать как с переменной nameproduct тут ради примера присваиваем в переменную проекта nameproduct которую нужно создать. на выходе в переменных проекта увидим название продукта
project.Variables["nameproduct"].Value  = nameproduct;


// можем работать так и с json по ключу
project.Variables["description"].Value = project.Json.description;



// для наглядности в лог выведет все значения ключ = значение. Читаем внимательно выше обращая внимание на то что везде мы используем ключ, а именно тут мы перечисляем и ключ и значение. соответственно принимаем во внимание факт использования ключа, который можно просто скопировать из лога все что до "=" и использовать уже в коде как это делалось с name, brandName и тд. Добавил этот факт так как может вызвать смущение квадратные скобки ну или вложенные массивы json.
// string country = project.Json.addOptions[10].Value;



Dictionary<string, string> all = project.Json.GetAllMembersList(); //сложим всё в словарь
foreach(KeyValuePair<string,string> s in all)
    project.SendInfoToLog(s.Key + "=" + s.Value);


return project.Json.addOptions[10].Value;

по сабжу вариантов много https://regexr.com/5lklq

Вообще вполне разумно Начала и окончания слов обрабатывать оператором [\W] но он захватывает знаки препинания
но можно исключить к примеру группы слов
C#:
Развернуть Свернуть Копировать
([^\w]+[\W]{2,})

Но в идеале хотябы использовать
Символьные классы POSIX

C#:
Развернуть Свернуть Копировать
[[:blank:]]


значит там не только пробелы, а также табы и коретки))) регулярка [\t{1,}|\r{1,}|\s{2,}]
Решение отличное, но учитывать нужно что группировки [] и операторы | имеют немного разный эффект. Ну либо [] просто для красоты у тебя. Особенно стоит обращаться внимание на "|" оператор или, если мы используем в качестве выражений длинный список перечислений, в случае частичного вхождения одного с другим будет очень не ожидании результат =) вплоть до пропуска вхождений 100% соответствующих.

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

{1,} это абсолютный эквивалент + и в целом его можно опустить если используется всего один набор =)
Представление Число повторений Эквивалент Пример Соответствие
? Ноль или одно {0,1} colou?r color , colour
* Ноль или более {0,} colou*r color , colour , colouur и т. д.
+ Одно или более {1,} colou+r colour , colouur и т. д. (но не color )


\r?\n можно объединить для разных unix и windows переносов
оптимизированы вариант и более понятный в записи и чтения.
C#:
Развернуть Свернуть Копировать
(\t|\r?\n|\s{2,})
 
  • Спасибо
Реакции: soprano

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)