Добрый день!
Возможно ли с помощью регулярных выражений:
1) Все отдельностоящие слова полностью из заглавных букв сделать в формате Первая Буква Заглавная (Proper).
Например: «НОВЫЙ СВЕТ СоЛнЦе Луч9 20 САДОВОДСТВО дорога» превратить в: «Новый Свет СоЛнЦе Луч9 20 Садоводство дорога» ?
2) Вытащить улицу и номер дома часто можно с помощью следующего правила:
смотрим первую попадающуюся цифру в строке и берем то слово перед ней, которое попадается первым написанным с большой буквы.
Пример: «Санкт-Петербург, Обводный канал 45/1 строение 25Б Литер М» вытащит строку «Обводный 45»., потому что 45 - первая цифра в строке. Обводный - первое написанное с заглавной буквы перед 45.
3) Есть улицы-исключения в их название входит цифра (пример: 8 линия В.О. д.10)
У меня имеется список исключеений. Как для них сделать чтобы они вытащили ближайшее впереди и ближайший сзади номер?
Например "Санкт-Петербург г. 8-я Красноармейская ул. 27 кв.40" -> "8 Красноармейская 27"
(?:Кадетская|линия|Советская|Рабфаковский|Предпортовый|Января|Красноармейская|Утиная|Мая|Комсомольская|Муринский|Лахта|Верхний|_)
Пыталась сделать сама. Но именно эти задачки у меня не получились.
Подскажите, пожалуйста, как они решаются?
Код |
---|
Function street_extract_test()
'если слово в строке полностью из заглавных букв превратить его в "Первая Заглавная"
txt = "НОВЫЙ СВЕТ СоЛнЦе Луч9 20 САДОВОДСТВО дорога"
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "([А-ЯЁ]+{2,})"
regex.Global = True
'txt1 = regex.Replace(txt, Application.WorksheetFunction.Proper("$1"))
'Первая цифра в строке + первое перед этой цифрой слово с Заглавной буквы
txt = "2Санкт-Петербург, Обводный канал 45/1 строение 25Б Литер М"
regex.Global = False
regex.Pattern = "([\s|^]+)([А-Я]+)([А-Яа-я0-9A-Za-z\s]+)(\d+)(\s|$)?"
If regex.test(txt) Then
Set matches = regex.Execute(txt)
txt3 = matches.Item(0)
End If
End Function
|