1

このことはよく話題になっていることは知っていますが、次のように一致させるのに問題があります...

入力例: 「test test 310-315」

ダッシュが続く数字を認識して 310 を返す正規表現が必要です。ただし、正規表現にダッシュを含めるにはどうすればよいですか。したがって、最終的な一致結果は「310」になります。

どうもありがとう - kcross

編集:また、ダッシュを前に付けて同じことを行うにはどうすればよいですか?また、ダッシュの後の数字が負の数になる可能性あることも考慮してください...すぐに質問を書いたとき、これについて考えませんでした。例: "test test 310--315" は -315 を返し、"test 310-315" は 315 を返します。

4

5 に答える 5

3
Regex regex = new Regex(@"\d+(?=\-)");

\d+- 1 つ以上の数字を探します

(?=\-)- ダッシュが続くことを確認してください

@コンパイラを満足させるためにバックスラッシュをエスケープする必要がなくなります。

また、代わりにこれが必要な場合があります。

\d+(?=\-\d+)

これは、1 つ以上の数字、その後にダッシュ、その後に 1 つ以上の数字が続くことをチェックしますが、最初のセットのみに一致します。


あなたのコメントに応えて、-潜在的な負の (-) 番号を考慮しながら、 に続く番号をチェックする正規表現を次に示します。

Regex regex = new Regex(@"(?<=\-)\-?\d+");

(?<=\-)- 先行があることをチェックして確認する否定後読み-

\-?- ゼロまたは 1 つのダッシュのチェック

\d+- 1 つ以上の数字

于 2012-09-12T18:13:14.073 に答える
1

(?'number'\d+)-動作します(エスケープする必要はありません)。この例では、単一の番号を含むグループは名前付きグループ'number'です。両方のグループをオプションの記号と一致させたい場合は、次を試してください。

@"(?'first'-?\d+)-(?'second'-?\d+)"

ここで動作するのを見てください。説明するだけで、複雑なことは何もありません。-?オプションを照合し、1つ以上の数字を照合するため-\d+使用します。リテラル-一致自体。

于 2012-09-12T18:00:22.067 に答える
0

これが私が使用するいくつかのドキュメントです:

http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet

そのページのコメントセクションでは、ダッシュをエスケープすることを提案しています'\-'

エスケープ文字をエスケープするようにしてください\

于 2012-09-12T17:59:44.437 に答える
0

-を使用して、正規表現言語(範囲を意味する)での特別な意味をエスケープしbackslash (\)ます。バックスラッシュは、引用符をエスケープしたり、一部の文字の一部にするためにC#リテラルで特別な意味を持っているため、別の。でエスケープする必要がありますbackslash(\)。つまり、本質的にはです\d+\\-

于 2012-09-12T18:00:11.623 に答える
0

\b\d*(?=\-) あなたはダッシュを先読みしたいと思うでしょう

\ b=単語の境界から始まります\d=任意の10進数に一致します*=必要な回数だけ前の数字に一致します(?= \-)=ダッシュを先読みします

投稿後にスラッシュが表示されないフォーマットの問題のために編集

于 2012-09-12T18:05:40.457 に答える