2009-07-02 4 views
0

パターンにマッチしたい:0以上の空白で始まり、その後に "ABC"が続き、次に何かが続きます。正規表現でこれを構成する方法

" ABC " " ABC111111" "ABC"のようなものは一致します。
しかし、" AABC" "SABC"のようなものは一致しません。

私が試した:

String Pattern = "^\\s*ABC(.*)"; 

をしかし、それは動作しません。

アイデア?これはC#のところです。

+1

あなたのパターンは、右の私には見えます。それは動作しないと確信していますか? –

+1

はい、そのパターンは私にとってもうまくいきます。おそらくC#コードにエラーがあります。コードを投稿することもできますか? –

答えて

1

通常、\\はリテラルのバックスラッシュを使用していますので、おそらくソリューションが失敗している場所です。あなたが置き換えを行っている場合を除き、あなたはまた、\sスペース文字[ \t\n\f\r\x0B]またはスペース、タブ、改行、改ページ、復帰、および垂直タブ以外の文字に一致し.*

周りの括弧は必要ありません。

私がお勧めします:

String Pattern = @"^[ ]*ABC.*$"; 
+0

C#では、そのような正規表現でバックスラッシュをエスケープする必要があります。 – Tom

+0

パターンの前に@を付けるとどうなりますか? – Saobi

+0

@Saobi - 逐語文字列リテラルは、@文字の後に二重引用符、ゼロ以上の文字、および閉じた二重引用符で構成されます。簡単な例は@ "hello"です。逐語的な文字列リテラルでは、区切り文字間の文字はそのまま解釈されますが、唯一の例外は引用 - エスケープシーケンスです。特に、簡単なエスケープシーケンスと16進数およびUnicodeエスケープシーケンスは、そのままの文字列リテラルでは処理されません。 http://msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx – JeffH

2

私はこれがregexpl.com

+0

行の先頭から検査を強制しないでください。 –

+0

^は、行の先頭でパターンが始まることを意味します。 – Kleinux

0

に動作することを確認し

string pattern = @"\s*ABC(.*)"; // Using @ makes it easier to read regex. 

を試してみて、あなたが単一行ではなく複数行を使用する正規表現エンジンを設定していることを確認してください。

1

私はこれをテストしました。できます。大文字のABCのみを照合する場合は、RegexOptions.IgnoreCaseを省略することができます。

/// <summary> 
/// Gets the part of the string after ABC 
/// </summary> 
/// <param name="input">Input string</param> 
/// <param name="output">Contains the string after ABC</param> 
/// <returns>true if success, false otherwise</returns> 
public static bool TryGetStringAfterABC(string input, out string output) 
{ 
    output = null; 

    string pattern = "^\\s*ABC(?<rest>.*)"; 

    if (Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase)) 
    { 
     Regex r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); 
     output = r.Match(input).Result("${rest}"); 
     return true; 
    } 
    else 
     return false; 
} 

電話番号:

static void Main(string[] args) 
{ 
    string input = Console.ReadLine(); 

    while (input != "Q") 
    { 
     string output; 
     if (MyRegEx.TryGetStringAfterABC(input, out output)) 
      Console.WriteLine("Output: " + output); 
     else 
      Console.WriteLine("No match"); 
     input = Console.ReadLine(); 
    } 
}