Перевести символы в нижний регистр

cntract2003

Client
Регистрация
08.12.2013
Сообщения
4
Благодарностей
0
Баллы
1
Здравствуйте. Нужно перевести в нижний регистр (названия улиц остаются с заглавными буквами, а остальные перевести в нижний регистр) текст такого вот плана . Подскажите как это осуществить?
Пример 1
Сдам 1-комн. на ул. Богдана Хмельницкого, 1, 9/12к, 44/26/10, окна пластик, лоджия застекленная, Новый ДОМ, санузел совмещенный, ЖЕЛЕзнаЯ дверь, В САНУЗЛЕ КАФЕЛЬ...БЕЗ ЖИВОТНЫХ!!! +СВЕТ, +ВОДА.
Пример 2
Сдам 2-комн. на ул Котовского, НА ПОЛУ ЛАМИНАТ, МЕБЕЛЬ НЕОБХоДИМАЯ, холодильник, МИКРОВОЛНОВАЯ ПЕЧЬ,
Пример 3
Продам 2-комн. на Снежной, 167, 4/8к, 67/34/10, УДОБНАЯ СВОБОДНАЯ ПАРКОВКА
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Здравствуйте. Нужно перевести в нижний регистр (названия улиц остаются с заглавными буквами, а остальные перевести в нижний регистр) текст такого вот плана . Подскажите как это осуществить?
Пример 1
Сдам 1-комн. на ул. Богдана Хмельницкого, 1, 9/12к, 44/26/10, окна пластик, лоджия застекленная, Новый ДОМ, санузел совмещенный, ЖЕЛЕзнаЯ дверь, В САНУЗЛЕ КАФЕЛЬ...БЕЗ ЖИВОТНЫХ!!! +СВЕТ, +ВОДА.
Пример 2
Сдам 2-комн. на ул Котовского, НА ПОЛУ ЛАМИНАТ, МЕБЕЛЬ НЕОБХоДИМАЯ, холодильник, МИКРОВОЛНОВАЯ ПЕЧЬ,
Пример 3
Продам 2-комн. на Снежной, 167, 4/8к, 67/34/10, УДОБНАЯ СВОБОДНАЯ ПАРКОВКА
Здравствуйте.

Как один из вариантов - все заглавные символы помещаем через регулярку в Список, затем берем первую строку из списка с удалением, проверяем на кол-во символов, если один символ, то ничего не делаем, идем в цикле снова за первой строкой, если в строке более 1 символа, то меняем регистр у строки и производим Замену через Обработка текста - Замена.

53540
 
  • Спасибо
Реакции: cntract2003

cntract2003

Client
Регистрация
08.12.2013
Сообщения
4
Благодарностей
0
Баллы
1
А как это сделать?
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Здравствуйте.

Как один из вариантов - все заглавные символы помещаем через регулярку в Список, затем берем первую строку из списка с удалением, проверяем на кол-во символов, если один символ, то ничего не делаем, идем в цикле снова за первой строкой, если в строке более 1 символа, то меняем регистр у строки и производим Замену через Обработка текста - Замена.

Посмотреть вложение 53540
а как с этим словом быть ? Новый
 
  • Спасибо
Реакции: cntract2003 и Sergodjan

cntract2003

Client
Регистрация
08.12.2013
Сообщения
4
Благодарностей
0
Баллы
1
Все в нижний регистр, кроме названия улиц
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
  • Спасибо
Реакции: cntract2003

cntract2003

Client
Регистрация
08.12.2013
Сообщения
4
Благодарностей
0
Баллы
1

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 061
Баллы
93
  • Спасибо
Реакции: cntract2003

Sergodjan

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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Такие, по всей видимости, только вручную фильтровать, если особо не заморачиваться)
проще всё в нижний регистр, а потом ручками улицу заглавную сделать, так как не везде есть ул. чтобы хоть от этого отталкиваться, можно конечно обработать такие улицы чтобы меньше потом было ручками проходить но тут полюбому только на C# решение делать или может из кубиков гору строить
 
  • Спасибо
Реакции: cntract2003

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
А как это сделать?
Приложил пример шаблона.
Но там, как уже справедливо замечено выше, не все варианты больших символов заменяются, нужно продумывать доп. варианты регулярок, которые отлавливали бы доп. ситуации.

53545


Исходник:
Сдам 1-комн. на ул. Богдана Хмельницкого, 1, 9/12к, 44/26/10, окна пластик, лоджия застекленная, Новый ДОМ, санузел совмещенный, ЖЕЛЕзнаЯ дверь, В САНУЗЛЕ КАФЕЛЬ...БЕЗ ЖИВОТНЫХ!!! +СВЕТ, +ВОДА.
Результат:
Сдам 1-комн. на ул. Богдана Хмельницкого, 1, 9/12к, 44/26/10, окна пластик, лоджия застекленная, Новый дом, санузел совмещенный, железнаЯ дверь, В санузле кафель...без животных!!! +свет, +вода.
 

Вложения

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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Приложил пример шаблона.
Но там, как уже справедливо замечено выше, не все варианты больших символов заменяются, нужно продумывать доп. варианты регулярок, которые отлавливали бы доп. ситуации.

Посмотреть вложение 53545

Исходник:

Результат:
Можно оталкнуться от Сдам, Продам, Сниму и до первой запятой
потом парсить ул. и до запятой, выставлять словам первую заглавную
потом парсить на и до запятой и так же
ну а там смотреть весь код уже и подгонять
 
  • Спасибо
Реакции: cntract2003 и Sergodjan

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Дополнил пост-обработкой под доп. варианты больших символов.

53550


Результат:
Сдам 1-комн. на ул. Богдана Хмельницкого, 1, 9/12к, 44/26/10, окна пластик, лоджия застекленная, новый дом, санузел совмещенный, железная дверь, в санузле кафель...без животных!!! +свет, +вода.
 

Вложения

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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
тоже намудрил ))

C#:
var sourseList = project.Lists["SourseList"];

var list = new List<string>{ "Сдам", "Продам", "Сниму" };
var list2 = new List<string>{ "ул ", "ул.", "на " };

for (int i = 0; i < sourseList.Count; i++)
{
    var str = sourseList[i].ToLower();
    
    var res = str.Substring(0, 1).ToUpper() + (str.Length > 1 ? str.Substring(1) : "");
    
    foreach (var ans1 in list)
    {
        if (res.Contains(ans1))
        {
            var str1 = Regex.Match(res, @"(?<=" + ans1 + ".*).*?,").Value.Trim();
            
            foreach (var ans2 in list2)
            {
                if (str1.Contains(ans2))
                {
                    var str2 = Regex.Match(res, @"(?<=" + ans2 + ").*?(?=,)").Value.Trim();
                    
                    string[] s = str2.Split(' ');
 
                    for (int i2 = 0; i2 < s.Length; i2++)
                    {
                        if (s[i2].Length > 1)
                            s[i2] = s[i2].Substring(0, 1).ToUpper() + s[i2].Substring(1, s[i2].Length - 1).ToLower();
                        else s[i2] = s[i2].ToUpper();
                    }
                    
                    var line1 = string.Join(" ", s);
                    var line2 = line1.ToLower();
                    
                    var result =  Regex.Replace(res, line2, line1).Trim();

                    project.Lists["ResultList"].Add(result);
                    break;
                }
            }
        }
    }
}
2020-04-11_073010.png
 
  • Спасибо
Реакции: cntract2003 и Sergodjan

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
ещё пример, добавляем using System.Globalization;

C#:
var sourseList = project.Lists["SourseList"];

var list = new List<string>{ "Сдам", "Продам", "Сниму" };
var list2 = new List<string>{ "ул ", "ул.", "на " };

for (int i = 0; i < sourseList.Count; i++)
{
    var str = sourseList[i].ToLower();
    var res = str.Substring(0, 1).ToUpper() + (str.Length > 1 ? str.Substring(1) : "");
    
    foreach (var ans1 in list)
    {
        if (res.Contains(ans1))
        {
            var str1 = Regex.Match(res, @"(?<=" + ans1 + ".*).*?,").Value.Trim();
            
            foreach (var ans2 in list2)
            {
                if (str1.Contains(ans2))
                {
                    var str2 = Regex.Match(res, @"(?<=" + ans2 + ").*?(?=,)").Value.Trim();
                    var str3 = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str2);
                    
                    var str4 = str3.ToLower();
                    var result =  Regex.Replace(res, str4, str3).Trim();

                    project.Lists["ResultList"].Add(result);
                    break;
                }
            }
        }
    }
}
 
  • Спасибо
Реакции: cntract2003 и Sergodjan

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