|
|
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Мне нужно распарсить адресную строку на составляющие. Проблема в том, что строка шаблона получается сложная и мне не хватает 9 ссылок (\1...\9) при использовании regexp_replace. А при использовании regexp_substr возвращается все выражение соответствующее шаблону, хотя мне нужно взять из этого выражения только часть. Адресная строка имеет вид: НП; Улица, Дом/Блок, Место; Примечания Улица — обязательное и всегда должно присутствовать, все остальные части могут отсутствовать (и в этом случае не указываются также соседствующие разделители). НП — населенный пункт, может содержать буквы, цифры, пробел и дефис. Улица — улица, может содержать буквы, цифры, пробел и дефис. Дом — номер дома, содержит только числа (цифровые символы). Блок — дополнение к номеру (номер корпуса, блока, литера), может содержать буквы и цифры. Место — может содержать префикс, буквы и цифры, список возможных префиксов ограничен ("кв. ", "офис ", "каб. "); Примечание — произвольный текст. Теоретически текстовые данные могут быть в Unicode, поэтому задавать в шаблоне "[- 0-9A-Za-zА-Яа-я]" видимо не всегда правильно, но почему-то у меня не работает класс [:alphanum:] (Oracle 10g). Подскажите, можно ли составить для regexp_substr шаблон таким образом, чтобы он вернул только искомую часть? Например такое выражение: Код: plaintext Такое выражение: Код: plaintext ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 16:13 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Alibek B.можно ли составить для regexp_substr шаблон таким образом, чтобы он вернул только искомую часть?Переходить на 11g. Alibek B.Мы смотрим с оптимизмом... ...в оптический прицел.Ради бога, убери эту херню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 16:49 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Оказалось, что квадратные скобки нужно удваивать. Так классы работают: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Не посоветуете, как их можно оптимизировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 17:03 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
ElicРади бога, убери эту херню. Ради какого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 18:01 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
ElicAlibek B.Мы смотрим с оптимизмом... ...в оптический прицел.Ради бога, убери эту херню.+1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 18:29 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ни очень оно как-то работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 18:53 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Alibek B., Можно воспользоваться фактом что улица есть всегда тогда шаблоны станут чуть проще например для дома, блока и места можно сделать вот так Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. для места можно понадеяться на специфичность шаблона и сделать например так: Код: plsql 1. а вообще возможно лучше сделать trim(';' from trim(',' from regexp_substr(...))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 20:12 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
avasни очень оно как-то работает И не должно — данные не соответствуют шаблону. ln123а вообще возможно лучше сделать trim(';' from trim(',' from regexp_substr(...))) Действительно, попробую таким образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 20:31 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
это так, альтернатива для размышления Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 21:21 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
У меня ведь позиции полей не фиксированные, иначе я бы обычным INSTR обошелся. Но мысль понял, подумаю в этом направлении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 23:10 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, есть список вида [0-9]{1}.[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}. например: 1.2.13.2. или 1.23.2.1.11. хотелось бы значения вида .[0-9]{1}. представить в виде .0[0-9]{1}. , например .1. как .01. или .3. как .03. Подготовлен код вида Код: plsql 1. Например: Код: plsql 1. Который ищет необходимые вхождения, однако что подставить на замену ума не приложу. Может кто подсказать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2017, 21:01 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Заключить искомый шаблон в скобки, по краям добавить ".*", третьим аргументом указать \1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2017, 21:38 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Можно пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2017, 21:53 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2017, 08:46 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Хотя нет. Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2017, 08:47 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Alibek B.Хотя нет. Код: plsql 1. Да, так почти работает, но почему-то в этом случае не форматирует предпоследний уровень: Код: plsql 1. Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2017, 09:46 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Не предпоследний, а через один. Перед семеркой находится образец ".3." и следующий поиск продолжается далее, с подстроки "7.8.". Поэтому первая цифра с шаблоном не совпадает (нет предшествующей точки) и находится следующая цифра. Наверное с помощью одного регулярного выражения это не решить. Можно сделать так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2017, 10:10 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Alibek B., Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2017, 10:53 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Подскажите, как решить такой вопрос? Из строки нужно получить номер этажа. Использую такое выражение: Код: plsql 1. Выражение отлично работает, если в строке указан этаж. Но если он отсутствует, такой шаблон не работает. Если указываю так: Код: plsql 1. то почему-то этаж вообще не находится, ни в одной строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2017, 22:57 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Alibek B.Выражение отлично работает, если в строке указан этаж. Но если он отсутствует, такой шаблон не работает. Код: plsql 1. а так - работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 02:19 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
ma1tusа так - работает? нет, чушь. сорри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 04:29 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Alibek B. Код: plsql 1. Чересчур жадно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 08:00 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
ElicЧересчур жадно. Непонятно. Я разумеется пробовал указать ^.*?, не помогло. Регулярное выражение составить не смог и в конечном итоге сделал case when regexp_like() then regexp_replace() end. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 11:16 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Alibek B.ElicЧересчур жадно. Непонятно. Я разумеется пробовал указать ^.*?, не помогло. Регулярное выражение составить не смог и в конечном итоге сделал case when regexp_like() then regexp_replace() end. Elic подсказал конечно же правильно, то что не помогло - это ваши локальные грабли (скорее всего с NLS настройками на клиенте), у меня в plsql developer тоже выдает все замены как null - ковыряться на работе не могу, ибо все настройки заблокированы, но в sqlplus : Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Regards Maxim ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 12:30 |
|
||
|
Помогите составить регулярное выражение
|
|||
|---|---|---|---|
|
#18+
Alibek B. , может что-то пригодится из работающего кода на 11R2. Привожу куски кода, содержащего наиболее сложные regexp-ы, т.к. ты запрашиваешь именно это. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. Для Питера нужно дописать распознавание Литер домов. Что бы мозк не свернуть в сингулярность на regexp-ах использую RegexBuddy -- мне нравится. Для адекватного тестирования парсинга адресов (Москвы) натаскал когда-то из БД БТИ "хорошие" и "очень плохие" адреса, держи: 4-я 8 Марта ул., д.3 стр.1 4-я 8 Марта ул., д.3 стр.1 4-я 8 Марта ул., д.4 кор.1 4-я 8 Марта ул., д.6А стр.1 2-я Песчаная ул., д.2 кор.2 2-я Песчаная ул., д.2 кор.1 1905 Года ул., д.25 1905 Года ул., д.27 стр.5 1812 Года ул., д.15 стр.8 1812 Года ул., д.15 800-летия Москвы ул., д.8 стр.1 800-летия Москвы ул., д.8 9 мая 9 Мая ул., д.9 9 Мая ул., д.10 Красного Маяка ул., д.9 Маяковского пер., д.11-13/16 стр.9 Маяковского ул., д.9 N 5500 N 5500 пр., д.Б/Н стр.1 N 5500 пр., д.5А стр.5 Южн.промзона, N 4922 пр., стр.10 Проектируемый N 4294 пр., д.2 стр.4 Панфилова (г.Зеленоград) Панфилова (г.Зеленоград) ул., д.13 стр.1 Панфилова (г.Зеленоград) ул., д.15А Панфилова ул., д.2 кор.1 Панфилова ул., д.2 кор.2 Октябрьская ж.д., Московское, 646 км прочие, стр.1 Октябрьская ЖД, Москва-Санкт-Петербург, 10-й км прочие, стр.1 Новолужнецкий пр., Лужнецкая эстакада прочие, стр.1 МЖД, Рижское, 8-й км прочие, д.1 МЖД, Рижское, 8-й км прочие, д.1А стр.1 Волжский Бульвар 114А кварт., д.10 стр.1 Волжский Бульвар 114А кварт., д.Б/Н кор.9 Волжский бульвар 95 кварт., кор.2 Волжский бульвар 95 кварт., кор.3 стр.2 Бутово Северное 2 мкр., д.Н Бутово Северное 3 мкр., кор.30 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 15:45 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39431898&tid=1886163]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
257ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 238ms |
| total: | 623ms |

| 0 / 0 |
