4

次の文字列の数字を一致させる必要があります。それらが他の数字を含む長い文字列の一部である可能性があるので、テキスト「エラーコード」に続くスペースの直後にある数字と特に一致させたいと思います。

Error Code 0  # Match = 0
Error Code 45 # Match = 45
Error Code 190 # Match = 190

また可能:

Some Words 12 Error Code 67 Some Words 77 # Match = 67

使用してsomeString.match(regEx)[0]いますが、正規表現を正しく取得できません。

4

4 に答える 4

18
/(?:Error Code )[0-9]+/

これは、キャプチャしないグループを使用します(すべての正規表現の実装で使用できるわけではありません)。「文字列の方がこのフレーズを使用する方がよい」と表示されますが、このフレーズを一致の一部にしたくはありません。次の数字だけを使用します。

1桁から3桁だけを一致させたい場合:

/(?:Error Code )[0-9]{1,3}/

Rubyを使用すると、正規表現でごくわずかな制限に遭遇するはずです。条件を除けば、Rubyの正規表現で実行できないことはあまりありません。

于 2013-01-15T18:24:36.897 に答える
8

文字列 "Error Code 190" を指定すると、ここで提供されている他の正規表現の例のように "Error Code" ではなく "190" が返されます。

(?<=Error Code.*)[0-9]
于 2013-01-15T18:50:02.323 に答える
4

次の正規表現を使用します。

/Error\sCode\s\d{1,3}/

または、名前付きグループで:

/Error\sCode\s(?<error_code>\d{1,3})/

最後のものは、名前付きグループの下でエラー コード、番号を取得します。\s空白に一致しますが、x フラグが指定されていない限り不要であることに注意してください。次のようにマッチ キャプチャにアクセスできます。

str = "Error Code 0\nError Code 45\nError Code 190"
error_codes = str.lines.map{|l|l.match(regex)[:error_code]}
#=> ["0", "45", "190"]
于 2013-01-15T18:41:54.313 に答える
0

この正規表現を使用できます: 数字のみ、1 から 3 まで数えます:

regexp = "^\\d{1,3}$"
于 2015-10-12T14:37:13.683 に答える