Как получить часть строки по шаблону

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Возник вопрос при получении данных.
При парсинге получается так:

45 м² Общая 4 из 26 Этаж 2015 Построен 2010
23 м² Жилая 7,5 м² Кухня 14 из 17 Этаж 2016
67 м² Общая 55 м² Жилая 8 м² Кухня 8 из 9 Этаж 1970 Построен
64 м² Общая 10 из 29 Этаж 2017 Построен
Мне нужно из каждой такой строк получить вот эти данные:
4 из 26
14 из 17
8 из 9
10 из 29
Кто знает, прошу подсказать регулярку или сниппет для получения
одно-двузначных цифр справа и слева от предлога из
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 423
Баллы
113
Возник вопрос при получении данных.
При парсинге получается так:


Мне нужно из каждой такой строк получить вот эти данные:

Кто знает, прошу подсказать регулярку или сниппет для получения
одно-двузначных цифр справа и слева от предлога из
\d{1,2}\ из\ \d{1,2}.*?
1642688908719.png
 
  • Спасибо
Реакции: Ilshakin и soprano

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Вот так получается
C#:
string total = Regex.Match(total, @"\d{1,2}\ из\ \d{1,2}.*?").Value;
Супер. Спасибо.

Было бы интересно видеть вариант без регулярки.
На чистом C#.
 

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
582
Баллы
93
Возник вопрос при получении данных.
При парсинге получается так:


Мне нужно из каждой такой строк получить вот эти данные:

Кто знает, прошу подсказать регулярку или сниппет для получения
одно-двузначных цифр справа и слева от предлога из
C#:
foreach (Match match in Regex.Matches(string.Join("\n", project.Lists["лист с данными"]), @"\d{1,2}\ из\ \d{1,2}.*?")) project.Lists["лист для результата"].Add(match.Value);
 
  • Спасибо
Реакции: Alexmd

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
C#:
foreach (Match match in Regex.Matches(string.Join("\n", project.Lists["лист с данными"]), @"\d{1,2}\ из\ \d{1,2}.*?")) project.Lists["лист для результата"].Add(match.Value);
А почему List а не string ?
Эти строки по одной берутся.
 

heks

Client
Регистрация
01.10.2013
Сообщения
1 222
Благодарностей
328
Баллы
83
(?<=Общая\ ).*?(?=\ Этаж)
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 423
Баллы
113
Было бы интересно видеть вариант без регулярки.
На чистом C#.
в общий код:
public static string getFloor(string data){
    var list = data.Split(' ').ToList();
    int iz = list.IndexOf("из");
    try{
        return string.Format(@"{0} {1} {2}", int.Parse(list[iz-1]), list[iz], int.Parse(list[iz+1]));
    }
    catch{
        return "null";}
}
вызов из кубика:
string total = CommonCode.getFloor("67 м² Общая 55 м² Жилая 8 м² Кухня 8 из 9 Этаж 1970 Построен");
 

soprano

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

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
в общий код:
public static string getFloor(string data){
    var list = data.Split(' ').ToList();
    int iz = list.IndexOf("из");
    try{
        return string.Format(@"{0} {1} {2}", int.Parse(list[iz-1]), list[iz], int.Parse(list[iz+1]));
    }
    catch{
        return "null";}
}
вызов из кубика:
string total = CommonCode.getFloor("67 м² Общая 55 м² Жилая 8 м² Кухня 8 из 9 Этаж 1970 Построен");
Так List зачем - там из ссылки на страницу квартиры парсятся разные данные и эти в том числе, там списка нет.
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 423
Баллы
113
запусти-ка перед тем, как возмущаться
1642691381514.png

Вместо конструкции с регуляркой
Вот так получается
C#:
string total = Regex.Match(total, @"\d{1,2}\ из\ \d{1,2}.*?").Value;
Супер. Спасибо.

Было бы интересно видеть вариант без регулярки.
На чистом C#.
по Вашей же просьбе, выше я предложил Вам вариант без регулярки
теперь в кубике будет так:
string total = CommonCode.getFloor(total);
Хотя, не понимаю, чем не нравится регулярка? можно и ее засунуть в общий код, чтобы глаза не мозолила...
 
  • Спасибо
Реакции: soprano

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
запусти-ка перед тем, как возмущаться
Посмотреть вложение 87968

Вместо конструкции с регуляркой

по Вашей же просьбе, выше я предложил Вам вариант без регулярки
теперь в кубике будет так:
string total = CommonCode.getFloor(total);
Хотя, не понимаю, чем не нравится регулярка? можно и ее засунуть в общий код, чтобы глаза не мозолила...
Я не возмущаюсь, а очень даже благодарен.
Хочется знать разные варианты, неизвестно какой и где после пригодится.
 

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