1. ホーム
  2. c#

c# 正規表現マッチの例

2023-10-03 04:19:32

質問

私は次のテキストから値を取得しようとしています。これはどのようにRegexで行うことができますか?

入力

<ブロッククオート

ダウンロード%#456 の場合、ダウンロード%#3434 の場合、ダウンロード%#3434 の場合、ダウンロード%#3434 の場合。このような場合、このアプリケーションを使用することはできません。このような場合は、%download%#298 に従ってください。ダウンロード%#893434を使用することで、より多くの時間を節約することができます.

出力

456  
3434  
298   
893434 

どのように解決するのですか?

つまり、"%download%#" というトークンが先行する数値を取得しようとしているのですね。

このパターンを試してみてください。

(?<=%download%#)\d+

これでうまくいくはずです。私は # または % は.NET Regexの特殊文字ですが、バックスラッシュをエスケープして \\ を使うか、あるいは の逐語的文字列 を使うこともできます。

var regex = new Regex(@"(?<=%download%#)\d+");
return regex.Matches(strInput);

ここでテストしたのは http://rextester.com/BLYCC16700

注意 lookbehindアサーション (?<=...) は重要です。 %download%# を結果に含めず、それ以降の数字だけを結果に含めたいからです。しかし、この例ではキャプチャしたい各文字列の前にそれが必要なようです。lookbehindグループは入力文字列の中にそれがあることを確認しますが、返される結果にはそれを含めません。 ルックアラウンドアサーションについての詳細はこちら。