2016-05-11 4 views
0

私は文字ベクトルから選択したい文字列形式を持っています。形式はgrepでフォーマットされた番号

123 123 1234 

です。この2つのスペースはハイフンでもかまいません。

grep("^([0-9]{3}[ -.])([0-9]{3}[ -.])([0-9]{4}$)",mytext) 

をしかし、この利回り:私は以下のことで、これを行うにしようとしています4桁

続くスペースやハイフンに続く、3桁の数字が続くスペースやハイフンすなわち3桁、

integer(0) 

私は間違っていますか?

+2

あなたの '[ - ]'は単なるドットとスペース以外にも多くマッチします。ドット、ハイフンまたはスペースにマッチさせるには '[.-]'が必要です。 –

+0

@WiktorStribiżew - OPはハイフンまたはスペースを必要としています。これはうまくいくはずです: 'grep( '^ \\ d {3} [ - ] \\ d {3} [ - ] \\ d {4} $'、x)' – jbaums

+2

あなたの空白がストリングの終わり。あなたはあなたの正規表現のスペースを考慮することも、行のアサーションの終わりを削除することもできます。 –

答えて

2

あなたがそうのように、その空白を考慮することができるいずれかのように、あなたの文字列は、末尾の空白があります。

grep("^([0-9]{3}[ -.])([0-9]{3}[ -.])([0-9]{4} $)",mytext) 

かそこらのように、ラインアサーション"$"の終わりを削除します。

grep("^([0-9]{3}[ -.])([0-9]{3}[ -.])([0-9]{4})",mytext) 

また、WiktorStribiżewによって指摘されているように、文字クラス[ -.]は、" ""."の間の任意の文字と一致します。 "-""."" "と一致させるには、"-"をエスケープするか、クラスの最後に配置する必要があります。 like [ \-.]または[ .-]

関連する問題