Если позволите, напишу как это делается в геодезических программах, а дальше возможны вариации.
Практически никогда не используются знаки ° ’ ", вместо них набиваются пробелы (так удобнее набирать с клавиатуры);
Разделителем полей широты/долготы являются символы [NSWE], неважно пишутся префиксом или суффиксом - между широтой/долготой обязательно будет один из них.
Парсинг начинается с градусов, далее опционально минуты и секунды. ВСЕ поля трактуются с плавающей запятой; более трех полей - игнорируются.
В результате возможны вводы значений в любых комбинациях, а именно
DDD.DDDDDDD
DDD MM.MMMM
DDD MM SS.SS
N12.345 E34.56 <- десятичные градусы
N 12.345 E 34.56
12.35 N 34.56 E
N 12 35.67 E 34 56.78 <- градусы и минуты
и т.д.
Защиту от дурака делать не нужно, максимум проверка широта < 90 & долгота <180.
Если же при копипасте участвуют символы градусов/минут/секунд - они трактуются как пробелы и далее парсинг стандартной процедурой. Анализировать можно только знак градусов, т.к. для минут и секунд в разных текстах и вёрстках могут использоваться очень разные комбинации, за всеми фантазиями авторов не уследишь.
Маросейка 4 → должна найтись Маросейка 4/2 в москве
// Люди часто опускают дробь в номере дома, ибо в большинстве случаев эта информация избыточна. Было бы не плохо в данных случаях таки находить то что надо или хотя-бы близкое к тому.
Update: Вот еще странное написание: Москва Ленинградский пр-кт 74а, видимо пр-кт следует добавить к синонимам проспекта…
Забиваю на openstreetmap.ru в строку поиска: “краснопутиловская 14”, в подсказках всплывают два варианта, в том числе, дом 14/12 по Краснопутиловской улице СПб. Когда жму “Найти”, этого дома в результатах уже нет.
Тыркаю мышью по всплывшим в подсказках вариантам, никакой реакции (браузер Firefox 93.0, блокировщик рекламы отключил).