|
|
Из строки выделить слово.
AntiBuh, ЯнСмит, PR, Guk, Ногаминебить, Tarlich, Fedor-1971, Bad_Aleks, ass1c, Paggie, Fish, mikecool, Garykom, trk415e76, obs191, lirt82, shtucet, integer, mortal, StanLee, Maxsim24, phabeZ, Prog_man, mmg, АЛьФ, Irbis, ak71, Джордж1, Гипервизор, YroslavOteniev, del123, АгентБезопаснойНацио, Lazy Stranger, yurikmellon2, Daniilvb, PLUT, nysyssimara, Чужой, Ёпрст, Stepashkin, vbus, ГдеСобакаЗарыта, orakool, Мультук, John D, unenu, CepeLLlka, Прохожий, evgen48, Сметанин, 2S, Vstur, 1cVandal, Greeen, lubitelxml, trdm, am_bubnov, kubik_live
| ☑ |
|
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) тоже вариант рабочий.
|
|