2016-12-10 3 views
2

私はこれがあります。R - 正規表現、grepをプリントアウトすべて

"81 Delaware St, Staten Island, NY 10304, USA" 

を私は

grep("^.+?,", "81 Delaware St, Staten Island, NY 10304, USA", value= TRUE) 

返し実行81 Delaware St,

キャプチャしたい:

81 Delaware St, Staten Island, NY 10304, USA 

を私が試しましたperl=TRUE助けがなければ、すべてが印刷されます。

例:RegEx、私は表現が間違っていないことを知っています。

+1

あなたは正規表現で達成したいですか? –

+1

何をキャプチャしようとしていますか? –

答えて

1

正規表現が実際にgrepに渡す文字列と実際に一致し、grepが一致を検出したすべての文字ベクトルを返すだけなので、結果と混乱します。 grep部分文字列を返しません。 R demo

代替方法はにある参照してください

s <- "81 Delaware St, Staten Island, NY 10304, USA" 
sub(",.*", "", s) 
## => [1] "81 Delaware St" 

あなたはそれの後,と、すべての文字にマッチし、ちょうど必要な部分文字列を残してその部分を削除します,.*正規表現でsubを使用することができますと一致します。最初の部分文字列,

unlist(regmatches(s, gregexpr("^[^,]+", s))) 

this R demoを参照してください。

+0

あなたは必要なものを達成するのに役立ちませんか? –

+2

少し遅れて申し訳ありませんが、これは意味があります。私はgrepの仕組みを正確には分かりませんでした。 – SamFlynn

0

...私は表現が間違っていないことを知っています。

表現が間違っています。 ^.+?は、すべての文字を最初から最後まで返すようにgrepに指示します。

ここでは、Rドキュメント以外の参考資料をいくつか紹介します。

Regular Expressions with The R Language

R Regular Expression

Getting and Cleaning Data

1つのヒント:あなたの住所は、常にストリートをリストする前に空白が続くコンマ(、)が含まれている場合 - あなたはアドレスを分割するためにそれを使用することができます都市から。しかし、常にデータを抽出する方法はあります。

+0

* '^。+? 'は、最初から最後まですべての文字を返すようにgrepに指示します*は間違った説明ですが、OP正規表現は異なります。 –

+0

正規表現が違うということが何であるか分かりません。パターンについて。 OPのメソッドにかかわらず、パターンは検索される文字列のセグメントを返しません。 – timtrice

+1

正規表現は私が望むものを選択しますが、grepを間違って使用しているだけです。 – SamFlynn