|
Из строки выделить слово. | ☑ | ||
|---|---|---|---|---|
|
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
14.02.26
✎
21:57
|
(6) А мне нейронка выдала такую регулярку (?<=\()[^,]*(?=,)
Написала, что твой вариант с ленивым квантификатором и предпочтительнее использовать (?<=\()[^,]*(?=,), потому что: Чётко ограничивает набор символов (без запятых внутри результата). Работает быстрее за счёт отсутствия отката. Поведение предсказуемо и легко читается. Безопаснее при обработке больших или сложных строк. Ленивый вариант .*? допустим в простых случаях, но менее оптимален и потенциально менее надёжен. |
|||
|
10
lirt82
13.02.26
✎
13:31
|
(9) тоже вариант рабочий.
|
|||
|
11
lEvGl
гуру
14.02.26
✎
00:15
|
все как всегда упирается в стабильность структуры исходной строки, а если стабильно, то хоть сред хоть рег. А если нет, то полномочия все. НО, конкретно в этом случае для универсальности я бы сделал классификатор городов (а кто то уже постарался) и через него искал в строке, а то и наоборот
|
|||
|
12
Волшебник
14.02.26
✎
01:34
|
(11) Плохое решение. Давно уже сделан классификатор городов России
|
|||
|
13
Ногаминебить
14.02.26
✎
10:49
|
(11) Названия городов часто встречаются в названиях улиц, повторяются и пересекаются между собой. Придется накручивать много хитрых условий и универсальность уже будет так себе.
|
|||
|
14
lEvGl
гуру
14.02.26
✎
21:54
|
(13) если классификатор из названий городов, то проблем нет - Найти(Строка, Город) и все. Типовой посмотреть, что в нем есть
|
|||
|
15
PR
14.02.26
✎
21:57
|
(11) Действительно, Ростов и Ростов-на-Дону и все, уже пишите письма
Кроме того, 100 городов — 100 поисков? К чему вообще вот это все, если есть (6)? |
|||
|
16
lEvGl
гуру
14.02.26
✎
22:24
|
(15) он ростов Великий
прервать; ладно ладно, но регулярные или перебор символов быстро валятся при изменении структуры исходной строки |
|||
|
17
VladZ
14.02.26
✎
22:41
|
(0) Есть классификатор адресов и функции для работы с этим добром. Смотри туда.
|
|||
|
18
lucky_
14.02.26
✎
23:11
|
запятую не поставил-не работает.
скобку не поставил-не работает. регулярка в этой задаче-это выстрел себе в ногу. |
|||
|
19
palsergeich
15.02.26
✎
22:46
|
(18) Автоматизируя бардак - получится автоматизированный бардак и модуль на 100500 строк с Если Иначе (и насамом деле безумной стоимостью разработки и владения)
И придется внедрять средства нечеткого поиска, скорее всего на базе ИИчницы. Только денег никто не даст как правило) |
|||
|
20
DrZombi
гуру
16.02.26
✎
06:57
|
(5) А если две скобки? :)
Пример: "Набор любых символов (100) и тут (Город,адреса)" |
|||
|
21
lirt82
26.02.26
✎
09:34
|
а если это поле в запросе НаименованиеОфиса, как в запросе реализовать поиск города? с условием от первой скобки "(" и заканчивая первой запятой "," после этой скобки.
|
|||
|
22
Fish
гуру
26.02.26
✎
10:07
|
(14) Ага. И тогда в адресе "Санкт-Петербург, ул. Тамбовская" легко найдёшь город Тамбов :))))
|
|||
|
23
1cVandal
26.02.26
✎
10:11
|
(21) лучше ненадо
|
|||
|
24
Garykom
гуру
26.02.26
✎
10:11
|
Есть огромный класс задач которые кажутся простыми
Но фактические они нерешаемы Когда хочется решений без ошибок и на любых исходных данных |
|||
|
25
Гипервизор
26.02.26
✎
10:36
|
(0) Это поди представление из контактной информации? Так там составные части адреса уже в отдельных полях лежат, плюс json.
|
|||
|
26
craxx
26.02.26
✎
10:47
|
(25) видимо нет, это из старых баз КИ надо создать
|
|||
|
27
1cVandal
26.02.26
✎
11:18
|
есть сервис dadata разбора строковых адресов на составляющие, можно через него
|
|||
|
28
spiller26
26.02.26
✎
12:20
|
Ну свою лепту внесу.
А если будет город в области/крае, то что? РФ, 119334, (Московская облась, Город-Там, ул. Петрова, дом № 5, корпус 3, помещ. 2П, этаж 3) |
|||
|
29
CaptanG
гуру
26.02.26
✎
13:03
|
(18) Город не указали не нашло совсем...Будем все возможные извращения искать? В ТЗ сказано шаблон строки строгий.
|
|||
|
30
spiller26
26.02.26
✎
13:41
|
(29) Вы не занете на что способны пользователи.
|
|||
|
31
Garykom
гуру
26.02.26
✎
13:45
|
(29) Шаблон может и строгий а вот адреса произвольные
|
|||
|
32
Fish
гуру
26.02.26
✎
13:46
|
(28) Всё. Это разрыв шаблона.
|
|||
|
33
Fish
гуру
26.02.26
✎
14:49
|
Кстати, в РФ есть города с одинаковыми названиями. Есть по 3 шт, есть и по 2.
|
|||
|
34
Ногаминебить
26.02.26
✎
15:18
|
(27) Да, он прикольный, хотя и платный. Но в свое время просто спас.
|
|||
|
35
sergeev-ag-1977
27.02.26
✎
05:21
|
А если не будет города? Не всегда же бывают именно города.
К примеру: 397920, Воронежская обл., Лискинский р-н, с. Залужное, ул. Центральная, дом ХХХ |
|||
|
36
CaptanG
гуру
27.02.26
✎
12:20
|
(30) я как раз знаю на что способны пользователи. Поэтому считаю, что все их выкрутасы предусмотреть все равно невозможно.
|
|||
|
37
CaptanG
гуру
27.02.26
✎
12:21
|
(35) Видимо предполагается что филиалы только в городах.
|
|||
|
38
CaptanG
гуру
27.02.26
✎
12:30
|
(31) ну всех вариантов все равно не предусмотреть.
|
|||
|
39
Fragster
гуру
27.02.26
✎
16:08
|
прикрутите по апи БЯМ. ну или дадату.
|
|||
|
40
Злопчинский
27.02.26
✎
21:51
|
Работающий рецепт
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |