2017-02-16 1 views
-1

正規表現でもこれが可能かどうかわかりませんが、ここではそのシナリオを示します。私が照合している文字列は、スペース区切りリスト(HTMLクラス)です。単語が@で始まる場合を除き、各単語が小文字のa-z、空白、0-9のいずれかを使用する場合は、文字列を一致させる必要があります。正規表現 - 特定の文字が文字列の一部に先行しない限り文字を許可しますか?

理想の結果:

red-one green-two blue-three =
redOne green-two blue-threeは=マッチしないマッチ(大文字を発見した)
red-one blue-two @greenThree =マッチ(大文字を見つけましたが、言葉は@で開始)

任意のアイデア?私はそれが可能ではないと思っていますが、おそらく教祖は知っています。

+2

あなたがしようとしたものを投稿し、それが機能しなかった理由、それはあなたが必要なものを明確になります。 –

答えて

1

あなたは、本質的に(スペース区切りであること、それを処理するために)「単語」レベルで一致し、ちょうど各単語は、オプションの末尾にスペースがあることを確認処理するそのシナリオを処理するために、次の式を使用することができるはずです。

^((@[a-zA-Z-]+|([a-z-])+)\s?)+$ 

これは基本的に2つの主要な条件で構成されています

  • @[a-zA-Z-]+
    • このセクションでは、「@」文字で始まるの場合、1組の文字に大文字の文字「」を含めることができます。
  • [a-z-])+
    • この項では、小文字とハイフンが含まれている一連の文字にマッチしますあなたの「通常の」ユースケース、です。これらの条件の

どちらもあなたのリスト内の各「単語」は、独自に評価することができるようになります各セットの後に、オプションの末尾のスペース文字、を可能とします。

enter image description here

var tests = new []{ 
    "red-one green-two blue-three", 
    "redOne green-two blue-three", 
    "red-one blue-two @greenThree" 
}; 

foreach(var test in tests) 
{ 
    var regex = new Regex(@"^((@[a-zA-Z-]+|([a-z-])+)\s?)+$"); 
    Console.WriteLine(regex.IsMatch(test)); 
} 
関連する問題