|
|
Из строки выделить слово.
2S, Vstur, 1cVandal, Greeen, ass1c, lirt82, lubitelxml, trdm, am_bubnov, kubik_live, Builder, ЕRPe, Mr_Boogie, АгентБезопаснойНацио, Толич, LuckyStar, vbus, nysyssimara, shuhard, DeeK, Garykom, PR, DiMel_77, aka MIK, lexx0002, мистер игрек, Fish, Homer, Somebody, PLUT, paramedic, MAG, Neg, Kongo2019, dchumak, Бертыш, Затейник, Ager, ads55, denk32, maxab72, MWWRuza, Ёпрст, CepeLLlka, obs191, Михаил Козлов, Волшебник, Мультук, Bazooka, Ненавижу 1С, Бычье сердце, nick86, Ногаминебить, ДенисСмирнов, evgen48, alexxx961503, Franchiser, Elf_80_lvl, reloc, DimVad, Kuzmich123
| ☑ |
|
0
lirt82
13.02.26
✎
10:52
|
Есть строка
НаименованиеОфиса = "РФ, 119334, (Москва, ул. Вавилова, дом № 5, корпус 3, помещ. 2П, этаж 3)";
по условию задачи необходимо выделить из этой строки название города. В примере это "Москва", шаблон строки строгий,
"хххххххх(<НазваниеГорода>,ххххххххххххх)" х - любой символ, включая пробел.
т.е. необходимо сформировать название города начиная от первой скобки "(" и заканчивая первой запятой после этой скобки.
Начал писать функцию, но не могу дальше продолжить:) прошу подсказать.
Функция НайтиГород(НаименованиеОфиса) Экспорт
Если ПустаяСтрока(НаименованиеОфиса) Тогда
Возврат Неопределено;
КонецЕсли;
// Обойдем все
Для ТекСимвол = 1 По СтрДлина(НаименованиеОфиса) Цикл
// Получим текущий элемент, сохранив в переменную
ТекЭлемент = Сред(НаименованиеОфиса, ТекСимвол, 1);
Если ТекЭлемент <> "(" Тогда
Продолжить;
Иначе
|
|
|
1
Kuzmich123
13.02.26
✎
10:52
|
(0) в 8.3.23 появилось
СтрНайтиПоРегулярномуВыражению (StrFindByRegularExpression)
Возможно, это тебе поможет
|
|
|
2
evgen48
13.02.26
✎
10:54
|
МассивПодстрок = СтрРазделить(НаименованиеОфиса,",", истина);
Город = СОКРЛП(СтрЗаменить(МассивПодстрок[2],"(",""));
|
|
|
3
1cVandal
13.02.26
✎
10:57
|
если шаблон строгий, то находишь скобку через
ПозицияНачала = СтрНайти(Наименованиеофиса, "(") + 1;
Это позиция с которой начинается твой город, берешь все что правее нее
СтрокаПарамПамПам = Сред(ПозицияНачала,СтрДлина(НаименованиеОфиса) -СтрДлина(ПозицияНачала ))
Далее ищешь позицию первой запятой после города через
ПозицияКонца = СтрНайти(СтрокаПарамПамПам, ",")
Ну и берешь только город
Город = Лев(СтрокаПарамПамПам, ПозицияКонца)
|
|
|
4
Ногаминебить
13.02.26
✎
10:58
|
Через СтрНайти ищешь номер символа скобки, через Сред отрезаешь кусок после нее, через СтрНайти ищешь запятую, через Лев отрезаешь свой город. :)
|
|
|
5
ass1c
13.02.26
✎
11:05
|
(0) Черновой алгоритм для теста, отладки и улучшения:
Результат = "";
НаименованиеОфиса = "РФ, 119334, (Москва, ул. Вавилова, дом № 5, корпус 3, помещ. 2П, этаж 3)";
ПозицияВхождения = СтрНайти(НаименованиеОфиса, "(");
Если ПозицияВхождения Тогда
ПозицияКонец = СтрНайти(Сред(НаименованиеОфиса, ПозицияВхождения + 1), ",");
Если ПозицияКонец Тогда
Результат = Сред(Сред(НаименованиеОфиса, ПозицияВхождения + 1), 1, ПозицияКонец - 1);
КонецЕсли;
КонецЕсли;
Сообщить(Результат);
|
|
|
6
vbus
13.02.26
✎
12:07
|
НаименованиеОфиса = "РФ, 119334, (Москва, ул. Вавилова, дом № 5, корпус 3, помещ. 2П, этаж 3)";
Город = СтрНайтиПоРегулярномуВыражению(НаименованиеОфиса,"(?<=\().*?(?=,)").Значение;
|
|
|
7
lirt82
13.02.26
✎
12:37
|
(6) супер лаконичный вариант, работает.
Снимаю шляпу как говориться.
|
|
|
8
Garykom
гуру
13.02.26
✎
12:38
|
Задача учебная?
Если нет - только в парсер адресов загонять и получать населенный пункт с его типом
В примере это "Москва", шаблон строки строгий,
"хххххххх(<НазваниеГорода>,ххххххххххххх)" х - любой символ, включая пробел.
Получается в любых X так же может быть "шаблон города" и не один
Какой надо получить? Первый? Второй? Из Середины? Последний?
|
|
|
9
PR
13.02.26
✎
12:51
|
(0) А мне нейронка выдала такую регулярку (?<=\()[^,]*(?=,)
Написала, что твой вариант с ленивым квантификатором и предпочтительнее использовать (?<=\()[^,]*(?=,), потому что:
Чётко ограничивает набор символов (без запятых внутри результата).
Работает быстрее за счёт отсутствия отката.
Поведение предсказуемо и легко читается.
Безопаснее при обработке больших или сложных строк.
Ленивый вариант .*? допустим в простых случаях, но менее оптимален и потенциально менее надёжен.
|
|
|
10
lirt82
13.02.26
✎
13:31
|
(9) тоже вариант рабочий.
|
|