2016-06-28 17 views
2

次の大文字と小文字を区別するC#正規表現を作成する必要があります。桁数([0-9] )に関係なく数字で始まる文字列。その後、スラッシュ/の後に任意のシーケンス()を含めることができます。 .jpgで終わると停止します。部分画像リンクの正規表現

これまでのところ、これは私が成功事例のせずに作成したものです:私は一種の正規表現を忘れてしまったので

Regex oRegex = new Regex("^[0-9]*/*.(jpg)$"); 

、私を助けることができる誰もここにはありますか?

EDIT:指名手配の文字列の

例:

23/3-2131-3134SA-2FRT-3DD.jpg

566/FSFRT-D3566-DDDDSF.jpg

私はこの質問に答えた正規表現のほとんどを試してきましたが、これまでのところ運がありません。この文字列はHTMLレスポンスから来ています。 N3/90C6D420-5B25-44CD-A57A-4A030D2762B0.jpg \

ライン上/home/app/app-api/uload.php

:私はHTMLと実際の応答を残します
+1

本当に正規表現にする必要はありますか? http://ideone.com/UU8n6bを参照してください –

+0

文字列が '2A3/3-2131-3134SA-2FRT-3DD.jpg'の場合、あなたのコードはそれに合っていますが、OPはそれを望んでいますか?それは明らかではないtho ..少なくとも私に。 – kuskmen

+0

@kuskmen文字列は常に数字で始まります。 –

答えて

2

について:

どんなに多くの桁([0-9]*)任意の数で始まる文字列ません。その後、スラッシュ/が続き、それには任意のシーケンス(*)を含めることができます。終了時には.jpgで終了します。

ポイントは*数量詞は、空の文字列にマッチすることができますようご[0-9]*は、持っている必要があります桁(S)-at-開始要件を適用しないことです。また、/*を使用して、文字列に/を許可しません。次に.は数値化されませんが、0以上の文字は.jpgまで一致させたいと考えています。だから、.*が必要でした。次に、.は、リテラル.と一致するようにエスケープする必要があります。

だから、あなたが必要とする正規表現は、ちょうど

new Regex(@"^[0-9]+/.*\.jpg$", RegexOptions.Multiline) 

RegexOptions.Multilineフラグがラインの先頭に一致することができますです。

RegexOptions.IgnoreCaseフラグを使用していないため、大文字と小文字が区別されます。このチェックは、正規表現なしで実現できます。

s.EndsWith(".jpg") && Char.IsDigit(s[0]) && s.Contains("/") 

IDEONE demoを参照してください。しかし、/の位置は非正規表現のアプローチでは考慮されていません。

+0

トリックをやりました!ありがとう、男! –

4

それはのようなものでなければなりません:

^\d+/.+\.jpg$ 

説明:

  • ^は、シーケンス内の行の先頭を示します。

  • \d数字(略称[0-9])です。

  • .+は、少なくとも1つの任意の文字を意味します。

  • \.jpgは、リテラル.jpg(ピリオドをエスケープする必要があります)を示します。

  • $マークは、シーケンス内の行の終わりを示します。

+0

これは例として与えられた2番目の文字列と一致しますか? – kuskmen

+0

それはすべきです。私はそれを試していませんでした... – manouti

+0

ああ、nvm私はグローバルではなく複数行のフラグでそれをテストしました... – kuskmen

1

私はあなたが(1)星とドットを混合し、(2)スラッシュをエスケープする必要があると思う:

Regex oRegex = new Regex("^[0-9]+\/.+(\.jpg)$"); 

あなたがここでそれをテストすることができます。https://regex101.com/r/mK8zK2/1

+2

スラッシュをまったくエスケープする必要はありません。最初の '[0-9]'で '*'はパターンを空の文字列にマッチさせ、開始時に数字を必要としません。 –

+0

真。プラスで更新されました。 –

+0

@Wiktor:.NETのどの味が使用されているのかよく分かりませんが、PCREとJavaScriptではバックスラッシュが必要なようです。 Pythonスタイルでは、スキップすることができます。 –

1

ここに1つの方法ですそれに合わせる。

[0-9]*\/[a-zA-Z0-9_]*(\.jpg) 
+0

改善できる: '(\ d * \ /.*)\。jpg' ** \ d ** [0-9]の代わりに。 **。**の代わりに[a-zA-Z0-9_]を使用してください。 * .jpg *グループをキャプチャする理由がわかりません... – FisheyLP