LoginSignup
9
7

More than 5 years have passed since last update.

正規表現の後方参照を用いて、重複した文字列を見つける方法

Last updated at Posted at 2015-03-11

文字列から重複した部分を抽出したい時、ありますよね。
この方法を知っていれば、for文を用いて難解なロジックを組まずとも解決出来ます。

サンプルデータ

住所の正規化を行う際に、大字の前後に同じ文字列が入ることがあります。
今回は次の住所を例に正規表現を紹介します。

  • 入力:東京都日野市日野大字日野123-4
  • 出力:東京都日野市日野123-4

サンプルコード

次のように、後方参照を用いて、直前で評価された結果の文字列を\1と参照してマッチさせる手法を使います。

# 同一な文字列があればマッチしたものが取得できます
pry(main)> '東京都日野市日野大字日野123-4'.match(/(.+)大字(\1)/)
=> #<MatchData "日野大字日野" 1:"日野" 2:"日野">

# 同一な文字列が無いと、空文字が返ります
pry(main)> '東京都日野市日野大字ああ123-4'.match(/(.+)大字(\1)/)
=> #<MatchData "大字" 1:"" 2:"">

# 重複文字列の抽出にも応用できます
pry(main)> '東京都日野市日野市ほげほげ'.match(/(.+)(\1)/)
=> #<MatchData "日野市日野市" 1:"日野市" 2:"日野市">

あとはお好きなように、アレンジしてみてください。

併せて読みたい

9
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7