|
Из строки выделить слово. 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
| ☑ | ||
|---|---|---|---|---|
|
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) тоже вариант рабочий.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |