Я предполагаю, что Google использует двухэтапный подход к проблеме (по крайней мере, это то, что я бы сделал). Сначала они используют довольно общий шаблон поиска, чтобы выбрать все, что может быть адресом, а затем они используют свою базу данных карты, чтобы найти эту строку и посмотреть, нет ли у них совпадений. Если они это сделают, это, вероятно, адрес, если они этого не сделают, то, вероятно, нет. Если вы можете использовать базу данных карт в своем коде, это, вероятно, облегчит вашу жизнь.
Если вы не можете ограничить географическое расположение адресов, я предполагаю, что практически невозможно определить строку как адрес, просто проанализировав ее, просто из-за огромного разнообразия форматов адресов, используемых по всему миру.