正規表現がうまく行かない
address="都道府県,市区町村,番地,建物名部屋番号"
という変数があり、ここから、番地を取得したいとします。
結論からいうと、
address.split(",")[2]
ですが、
正規表現でチャレンジしました。
まずはsubで、先頭の「都道府県,」を消して、それを2回繰り返そうと思いました。
のこった「番地,建物名部屋番号」から、「,」以降を消して終わりです。
まずは1回だけのバージョンでテスト
address.sub(/.+,/,'')
「都道府県,」のみが消える予定です。
結果
"建物名部屋番号"
となっちゃいました。
/.+,/の部分が「都道府県,」になるだろうと予測したのですが、
「都道府県,市区町村,番地,」になっちゃいます。
試しに
address.sub(/,/,'')
としてみると
「都道府県市区町村,番地,建物名部屋番号」
となり、最初の1個目をちゃんとけしてくれます。
なぜに???
・・・・・
まぁ番地のみ取得という問題は解決しているので
そういうもんだろうと今は割り切って次に進みます。
まだまだ、勉強中なもので、、、
今後勉強していけば、この疑問も晴れるかも、、、
よかったら誰か教えてTT
解答の一例ができたので以下に
address.sub(/[^,]+,/,'')
簡単に [^,]+, を解説
[^,] で , 以外の文字となります。例として、 [^A] でA以外の文字です。
[^,]+ で , 以外の文字が一文字以上です。 [^A]+ でA以外の文字が一文字以上です。
[^,]+, で , 以外の文字が一文字以上続いた後に , です。
[^A]+, でA以外の文字が一文字以上続いた後に , です。
最初の .+, は、任意の文字が続いた後に , だったので 都道府県,市区町村,番地, になっていました。
, も任意の文字と捉えられていたので、この結果だったと思います。
そこで , 以外の文字としたことで、 都道府県, になったと思います。
こちらがとてもわかり易かったのでご紹介です^^
初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」
初心者歓迎!手と目で覚える正規表現入門・その2「微妙な違いを許容しつつ置換しよう」
記事のご紹介ありがとうございました^^