2017-12-15 3 views
1

後:抽出部分、私はこれまでのような文字列(ただし、同一ではない)を持って考えると、所定のターゲット

"\ndigfodigjn \nfdoigoidfgj \nResidence\n123 N 74TH STREET \nPhiladelphia\nPA 19020\ngfhfgh gfhgfh \ndfijoij" 

それは「Residenceを」ストリングが含まれています。それから3つの部分文字列を抽出したいと思います。それぞれは改行で区切られますが、文字列全体での改行の総数は保証されません。唯一の保証は、レジデンス部分文字列の後に、改行で区切られたアドレスを表す3つの部分文字列があることです。

私はこれ欲しい:

123 N 74TH STREET Philadelphia PA 19020 

私はこの方法をサブストリングレジデンスを取得することができています:

str.split("\n").detect {|s| s =~ /^Residence/ } 

しかし、どのように私はそれの後にしたい部分文字列を取得することができますか?

答えて

0

考える:

> s="\ndigfodigjn \nfdoigoidfgj \nResidence\n123 N 74TH STREET \nPhiladelphia\nPA 19020\ngfhfgh gfhgfh \ndfijoij" 

あなたはregexで複数行の文字列をスライスした後、3行をキャプチャすることができます。

> s[/Residence\s*([^\n]*\n[^\n]*\n[^\n]*\n)/] 
=> "Residence\n123 N 74TH STREET \nPhiladelphia\nPA 19020\n" 

それともあなただけのキャプチャグループの一部にしたい場合:

> s[/Residence\s*([^\n]*\n[^\n]*\n[^\n]*\n)/,1] 
=> "123 N 74TH STREET \nPhiladelphia\nPA 19020\n" 

あなたがそれを分割することができます"\n" 3つの文字列が必要な場合s。 @dawgに基づいて

0

それはトリックを行います答え:正規表現はResidenceを探します

s[/Residence(\n[^\n]+){3}/].split("\n")[1..3] 

それが3つの改行を探しますが、改行ではありません何のために続きます。

結果の文字列が改行によって分割することができ、3つの最後の要素はアドレス

0

はルックバック式で試しています:

> str[/(?<=Residence)(\n[^\n]+){3}/].split("\n").join 
=> "123 N 74TH STREET PhiladelphiaPA 19020" 
関連する問題