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

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Встал вопрос удалить в полученном значении пустые строки до и после него
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", "");
Кто поможет найти решение?
 

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
кубик trim пробовали?
 

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Trim удаляет пробелы, а у меня пустая строка перед значением и после него.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43

soprano

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

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 562
Благодарностей
9 177
Баллы
113
Нифига он не образает. Там в коде куча Trim - и строки не удалил.
Можете привести свой исходник содержания переменной, при котором не срабатывает Trim?
Trim строки должен удалять также.

71639



71638
 

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Вот такой код
C#:
Quantity = Active.FindElementByXPath("//span[@class='quantity']", 0).InnerHtml.Trim().HtmlDecode();
получается так
71652
 

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
Скиньте пожалуйста значение которое нужно очистить, не скриншот, а текстом!
 

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93

alex8020

Client
Регистрация
16.08.2016
Сообщения
38
Благодарностей
39
Баллы
18
Может сначала HtmlDecode(), а потом Trim() сделать
 
  • Спасибо
Реакции: soprano

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Файл выше выложил.
Без разницы где HtmlDecode() ставить.
 

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43

alex8020

Client
Регистрация
16.08.2016
Сообщения
38
Благодарностей
39
Баллы
18
Попробуй следующей строкой еще раз обрезать:
Quantity = Quantity.Trim();

или взять InnerText вместо InnerHtml:
Quantity = Active.FindElementByXPath("//span[@class='quantity']", 0).InnerText.Trim();
 

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
InnerText - показывает нет такого элемента.
Trim второй раз ничего не даёт.
 

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
В общем в качестве альтернативы, попробуйте выдернуть регулярку из моего варианта php.
PHP:
preg_replace('#[^А-ЯЁа-яёa-zA-Z0-9\!\@\"\#\№\$\;\%\:\^\&\?\*\(\)\-\_\+\=\|\{\}\[\]\,\.\<\>\'\ \\\/]#u', '', $str);
Иногда бывает при парсинге попадаются не стандартные символов юникода.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
я не понимаю всей этой темы :-) а что вообще происходит ?

71657


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

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

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 562
Благодарностей
9 177
Баллы
113
  • Спасибо
Реакции: soprano

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Регистрация
05.06.2019
Сообщения
570
Благодарностей
455
Баллы
63
71672


или

Удаление лишних пробелов:
return Regex.Replace(project.Variables["text"].Value, @"\s{2,}", " ", RegexOptions.IgnoreCase).Trim();
 
Последнее редактирование:

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Удаление лишних пробелов:
return Regex.Replace(project.Variables["text"].Value, @"\s{2,}", " ", RegexOptions.IgnoreCase).Trim();
При парсинге в цикле не обрезает пустые строки снизу и сверху.
Нормально получается только с конвертацией
C#:
        int pg = int.Parse(Quantity);
        Quantity = Convert.ToString(pg);
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
455
Баллы
63
При парсинге в цикле не обрезает пустые строки снизу и сверху.
Нормально получается только с конвертацией
C#:
        int pg = int.Parse(Quantity);
        Quantity = Convert.ToString(pg);
значит там не только пробелы, а также табы и коретки))) регулярка [\t{1,}|\r{1,}|\s{2,}]
 
Последнее редактирование:
  • Спасибо
Реакции: soprano

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Регистрация
05.06.2019
Сообщения
570
Благодарностей
455
Баллы
63
  • Спасибо
Реакции: Hartwell и soprano

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93

Hartwell

Client
Регистрация
25.09.2014
Сообщения
194
Благодарностей
118
Баллы
43
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

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