Поменять местами «ул» с названием, не зацепив лишнего

  • Автор темы Автор темы big bear
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

big bear

Топикстартер
15 лет на форуме
Сообщения
56
Реакции
14
Есть, например, такой текст:
«г. Н-ск, мкр Н-ский, Н-ская ул., 123»
Надо поменять местами «ул» и «Н-ская». Но во-первых, и кроме «ул», и кроме «мкр», может быть разное; во-вторых, названия улиц может быть из разного количества слов; в-третьих, одно и то же слово может оказать и там и там (пусть и в разных строках), в-четвертых, «мкр Н-ский,» есть не всегда.
Казалось бы, должно быть так:
(?<=,пробел)(.+?)пробел(ул|мкр)\\.?(?=,)
Но так находится «мкр Н-ский, Н-ская ул.» и никак не могу сообразить, как сделать, чтобы первое словосочетание не захватывалось.
 
Почитайте получше справочник KLADR (классификатор адресный). Там много больше, чем "ул" и "мкр", сокращений.
 
Вроде бы явно написано «...и кроме «ул», и кроме «мкр», может быть разное...», однако.
Во избежание дальнейших недоразумений: в оригинале вместо «ул|мкр», естественно присутствует больше, но это принципиально на строку не влияет. Строка, очевидно, сокращена до принципально неубираемых элементов.
 
Ошибка именно в захватываемом шаблоне. (.+?)
Вы желаете захватывать слова внутри одного предложения, при этом до ближайшей запятой.
Следовательно надо исключить из поиска точку и запятую:
([^,.]+)
 
2kstati:
К сожалению в названиях улиц есть сокращения. Например, есть улица Вр. (врача) Сурова. А [^,] пробовал, не работало.

PS Хотя ща попробовал — работает, видимо раньше где-то была ошибка, теперь неизвестно где. В общем спасибо :)
 
Последнее редактирование модератором:
2kstati:
К сожалению в названиях улиц есть сокращения. Например, есть улица Вр. (врача) Сурова. А [^,] пробовал, не работало.

PS Хотя ща попробовал — работает, видимо раньше где-то была ошибка, теперь хз где. В общем спасибо :)
В этом случае определитесь конкретно что именно вы хотите захватывать. И да, [^,] - недостаточно. Необходимо использовать квантификатор +.
 
2splxgf: Не пойму, что вы так запали на эти «ул|мкр»? Очевидно же, что дело не в том, что конкретно тут стоит, а в том, что это нечто может присутствовать дважды.
 
Статус
Закрыто для дальнейших ответов.