質問: "(<.*?>|[0-90-9]|.|-|.|ー).*?(.*?公園|[ァ-ン一-龥]*?大学|[ァ-ン一-龥]*?小学校|[ァ-ン一-龥]*?中学校|[ァ-ン一-龥]*?高校|[ァ-ン一-龥]*?高等学校|[ァ-ン一-龥]*?施設|[ァ-ン一-龥]*?体育館)"; このパターンで、 while (m.find()){ Log.d("test",m.group(2)); } このように現状取得しています。 ### 発生している問題・エラーメッセージ 現状の問題は、住所のほうでの取得はまず、住所自体がうまく取れ無かったり、必要の無い文字が入っていたりします。 名所の方では重複して全ての住所が2.3回取得されてしまいます。 きれいに取得する方法や、パターンがあればぜひお教え願いたいです。 よろしくお願いいたします。
回答: 前処理としてHTMLタグを除去して、本文から住所を抜き出した方が綺麗にできると思いますね。 ``` static final String regex = ".*?(([ァ-ン一-龥]+?[都道府県])?([ァ-ン一-龥]+?郡[ァ-ン一-龥]+?[町村]|[ァ-ン一-龥]+?市[ァ-ン一-龥]+?区|[ァ-ン一-龥]+?[市区町村])(.*?)(\\d+|.+?丁目)(-\\d+|(.+?番地|.+?番))(.*?)(-\\d+|.+?号)?|[ァ-ン一-龥]*?公園|[ァ-ン一-龥]*?大学|[ァ-ン一-龥]*?小学校|[ァ-ン一-龥]*?中学校|[ァ-ン一-龥]*?高校|[ァ-ン一-龥]*?高等学校|[ァ-ン一-龥]*?施設|[ァ-ン一-龥]*?体育館)"; static final Pattern pattern = Pattern.compile(regex); static ArrayList extractAddressesFromHtml(String html) { ArrayList addressList = new ArrayList<>(); Matcher matcher = pattern.matcher(html); while (matcher.find()) { String address = matcher.group(1); addressList.add(address); } return addressList; } static void print(List addressList) { if (addressList.isEmpty()) { System.err.println("No Addresses"); return; } for (String address : addressList) { System.out.println(address); } } public static void main(String[] args) { // HTMLタグ除去後の文字列を渡す。 print(extractAddressesFromHtml("連光寺小学校〒160-8484東京都新宿区歌舞伎町1-4-1 所在地:多摩市桜ヶ丘1-17-7 東京都多摩市関戸6-12-1")); } ``` HTMLタグ除去も同じように正規表現を用いてできます。