0

次の文字列を指定します。

stuff = "banana 11/12/2009 123"

ruby .scan 呼び出しで正規表現を取得して返すだけにするにはどうすればよいですか:

["123"]

ruby で使用しましstuff.scan(/\b\d+\b/)たが、 \b 境界ではバックスラッシュが境界として認識されるため、メソッドから ["11","12","2009","123"] が返されることに気付きました。また、次を処理して "123" のみを返すスキャンが必要です。

stuff = "123 banana 11/12/2009"
stuff = "11/12/2009 banana 123"

アイデアはありますか?:)

4

6 に答える 6

2

このパターンを使用できます:

/(?<=\s|^)\d+(?=\s|$)/
于 2013-06-10T15:08:49.247 に答える
2

以下も使用できます。

(?<!\S)\d+(?!\S)

これは次と同等です(ただし、わずかに短い):

(?<=\s|^)\d+(?=\s|$)

これは、前後にスペースがある一致\d+、または文字列 (または行) の開始/終了です。

于 2013-06-10T15:15:04.073 に答える
1

否定先読み/後ろ向き

(?<!/)\b\d+\b(?!/)

/区切り文字として使用する場合の Ruby のエスケープ

(?<!\/)\b\d+\b(?!\/)

デモ: http://rubular.com/r/P9MjQ87csO

注:/常に正規表現を使用している場合は、区切り文字の変更を検討することをお勧めします。この Dailyvim の投稿によると、次の方法で実行できます。

mystring =~ %r{(?<!/)\b\d+\b(?!/)}

もうスラッシュについて心配する必要はありません。つまようじもたれ症候群を参照してください。

于 2013-06-10T15:14:12.340 に答える
0

/ を否定してみてはどうでしょうか。

stuff.scan(/[^\/]*\d[^\/]*/)
于 2013-06-10T15:08:29.307 に答える