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

Статус
Закрыто для дальнейших ответов.

big bear

Топикстартер
15 лет на форуме
Сообщения
56
Реакции
14
Есть, например, такой текст:
«г. Н-ск, мкр Н-ский, Н-ская ул., 123»
Надо поменять местами «ул» и «Н-ская». Но во-первых, и кроме «ул», и кроме «мкр», может быть разное; во-вторых, названия улиц может быть из разного количества слов; в-третьих, одно и то же слово может оказать и там и там (пусть и в разных строках), в-четвертых, «мкр Н-ский,» есть не всегда.
Казалось бы, должно быть так:
(?<=,пробел)(.+?)пробел(ул|мкр)\\.?(?=;)
Но так находится «мкр Н-ский, Н-ская ул.» и никак не могу сообразить, как сделать, чтобы первое словосочетание не захватывалось.
 

Валера1966

15 лет на форуме
Сообщения
1 291
Реакции
1 391
Почитайте получше справочник KLADR (классификатор адресный). Там много больше, чем "ул" и "мкр", сокращений.
 

big bear

Топикстартер
15 лет на форуме
Сообщения
56
Реакции
14
Вроде бы явно написано «...и кроме «ул», и кроме «мкр», может быть разное...», однако.
Во избежание дальнейших недоразумений: в оригинале вместо «ул|мкр», естественно присутствует больше, но это принципиально на строку не влияет. Строка, очевидно, сокращена до принципально неубираемых элементов.
 

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
Ошибка именно в захватываемом шаблоне. (.+?)
Вы желаете захватывать слова внутри одного предложения, при этом до ближайшей запятой.
Следовательно надо исключить из поиска точку и запятую:
([^,.]+)
 

splxgf

12 лет на форуме
Сообщения
7 744
Реакции
3 425

big bear

Топикстартер
15 лет на форуме
Сообщения
56
Реакции
14
2kstati:
К сожалению в названиях улиц есть сокращения. Например, есть улица Вр. (врача) Сурова. А [^,] пробовал, не работало.

PS Хотя ща попробовал — работает, видимо раньше где-то была ошибка, теперь неизвестно где. В общем спасибо :)
 
Последнее редактирование модератором:

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
2kstati:
К сожалению в названиях улиц есть сокращения. Например, есть улица Вр. (врача) Сурова. А [^,] пробовал, не работало.

PS Хотя ща попробовал — работает, видимо раньше где-то была ошибка, теперь хз где. В общем спасибо :)
В этом случае определитесь конкретно что именно вы хотите захватывать. И да, [^,] - недостаточно. Необходимо использовать квантификатор +.
 

big bear

Топикстартер
15 лет на форуме
Сообщения
56
Реакции
14
2splxgf: Не пойму, что вы так запали на эти «ул|мкр»? Очевидно же, что дело не в том, что конкретно тут стоит, а в том, что это нечто может присутствовать дважды.
 
Статус
Закрыто для дальнейших ответов.