2016-07-22 11 views
1

は、私は次の正規表現を持っている

"1、2、3、" 私は次の文字列に一致するように変更する必要があり

1つの特定の単語(大文字と小文字を区別しない):

「1、myword、3」

"myword、2、3"

"1、myword、3、mywordは"

にはどうすれば追加のチェックグループを追加することができますか?

更新:Mywordはオプションで、数回繰り返したり、文字列の先頭に置くことができます。

+2

'と' \ dの+ 'の両方を交換してください(?:\ D + | myword)'。 [?^ \ s *(?:\ d + | myword)(\ s *、\ s *(?:\ d + | myword))*)?\ s * $ '](http://regexstorm.net/tester?p =%5e%5cs *(%3f%3a%5cd%2b%7cmyword)(%5cs *%2c%5cs *%3f%3a%5cd%2b%7cmyword))*)%3f% 5cs *%24&i = 1%2c + 2%2c + 3%0d%0a1%2c + myword%2c + 3%0d%0amyword%2c + 2%2c + 3%0d%0a1%2c + myword%2c + 3 %2c + myword%0d%0a&o = m)。 –

+0

@WiktorStribiżew素晴らしい!どうもありがとう! – user3132547

+0

https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspxとcountオプションを見てください。 0、あなたのカウントかもしれないのでオプションです。すべての問題が正規表現ではありません。ちょっとしたコードを書いておくと、後に来て、それを維持しなければならないschmuckの意図をより明確にするかもしれません。 –

答えて

1

\d+の両方を(?:\d+|myword)に置き換えることができます。あなたはリテラルテキストcatdogを検索したい場合は

、垂直バーまたはパイプ記号で両方のオプションを区切る:Alternation with The Vertical Bar or Pipe Symbolを見てcat|dog。さらに多くのオプションが必要な場合は、リストを展開するだけです:cat|dog|mouse|fish

我々は唯一\d+数字とmywordを交互にしたい正規表現エンジンを伝えるために、我々はここでしか目的をグループ化するために使用さnon-capturing groupの内側に、それらを囲みます。

^\s*((?:\d+|myword)(\s*,\s*(?:\d+|myword))*)?\s*$ 

を参照してくださいregex demoを参照してください。

、鈍感MyWoRdケースと一致RegexオブジェクトをコンパイルするときにRegexOptions.IgnoreCaseフラグを使用、または(?i)インライン改質(すなわち(?i)^\s*((?:\d+|myword)(\s*,\s*(?:\d+|myword))*)?\s*$)と全体のパターンを付加します。ここで

C# demoです:

using System; 
using System.Collections.Generic; 
using System.Text.RegularExpressions; 

public class Test 
{ 
    public static void Main() 
    { 
     var inputs = new string[] { "1, 2, 3", "1, myword, 3", "1, MyWord, 3" }; 
     var pat = @"^\s*((?:\d+|myword)(\s*,\s*(?:\d+|myword))*)?\s*$"; 
     foreach (var s in inputs) 
      Console.WriteLine("{0} matched: {1}", s, Regex.IsMatch(s, pat, RegexOptions.IgnoreCase)); 
    } 

} 
+0

とmywordの小文字を区別しないようにするには? Mywordを使用するには? – user3132547

+0

'RegexOptions.IgnoreCase'フラグを使うか、パターン全体に'(?i) 'を付加してください。 –

1

開始するには、元の正規表現をに変更できる^\s*(\d+\s*,\s*)*\d+$に縮小することができます。

+0

mywordが立ち上がっていたらどうなりますか? mywordがオプションの場合は? – user3132547

+0

'(a | b)'は、正規表現中の 'a'または' b'をテキストの同じ位置にマッチさせることを意味します。したがって、この場合、 'myword'は完全にオプションで、開始時または終了時、またはその間に表示されます。 –

関連する問題