web-dev-qa-db-ja.com

C#文字列は数値の正規表現で始まります

文字列が数字で始まることを確認する方法を見つけるために、しばらく探し回っていました。数字で始まるかどうかを確認できる正規表現 '/ ^\d /'を見つけました。ただし、以下のコードでは機能しないようです。ステートメントif(Regex.Match(info,"/^\d/"))のどこで問題が発生しましたか?

//String attachbody is the attachment body from an email C read into a string
string[] data = Regex.Split(attachbody, "\n");

foreach (String info in data)
{
    if (Regex.Match(info,"/^\d/"))
    {
        string[] tabbedHeaderData = Regex.Split(info, "\t");
        TicketID = tabbedHeaderData[0].ToString();
        Status = tabbedHeaderData[1].ToString();
        URL = tabbedHeaderData[2].ToString();
        InitCats = tabbedHeaderData[3].ToString();
        PostRevCats = tabbedHeaderData[4].ToString();
        ListNumClosed = tabbedHeaderData[5].ToString();

        Console.WriteLine(TicketID);
        Console.WriteLine(Status);
        Console.WriteLine(URL);
        Console.WriteLine(InitCats);
        Console.WriteLine(PostRevCats);
        Console.WriteLine(ListNumClosed);
        Console.ReadLine();
    }
}

データの例(タブ区切り):
TicketIDステータスURL InitCats PostRevCats ListNumClosed 555555 Closed http://5555555.com/searcho 悪意のあるサイト55555

18

あなたの正規表現は間違っています。 /.../は、正規表現を定義するためのJavaScriptの規則です。 C#で次のように試してください:

if (Regex.IsMatch(info, @"^\d"))

また、ブール値を返す IsMatch メソッドを使用する必要があります。そうしないと、コードがコンパイルされません。

また、文字列が1つ以上の数字で始まるものと一致させる場合:

if (Regex.IsMatch(info, @"^\d+"))
51
Darin Dimitrov

これには正規表現は必要ありません。試す

_if (info.Length > 0 && char.IsDigit(info[0]))
{
   ...
}
_

正規表現を使用する場合は、_//_を取り出して、Regex.IsMatch(info,@"^\d")にします。

28
agent-j

これは、Regex.Matchに指定した文字列の形式です。

正しい形式は次のとおりです。

Regex.Match(info,@"^\d")

@は、エスケープ文字(円記号など)が通常の文字として扱われることを意味します。それがなければあなたの正規表現は"^\\d"

4
Kazar

あなたの正規表現は間違っています。 .NetはPerlスタイルの正規表現を使用しません。正しい式は@ "^\d"です。

また、.MatchのMatchCollectionを何にも使用しない場合は、Regex.IsMatch(...)を使用する必要があります。

RegEx.IsMatch(info, @"^\d")
1
erlando

正規表現(一部のInteview質問プラットフォームでは正規表現を許可しない)とChar.IsDigit(info[0])を使用したくない場合は、

if(info[0] => 0 && info[9] <= 9)を使用して、charが数値かどうかを確認できます。

この関数は_'.'_に対してtrueを返すため、_'.'_を数字と見なしたくない場合は要件に依存します(たとえば、整数値のみ)Char.IsDigit(info[0])を使用しないでください。

0
Nainesh Patel

文字列が数字で始まっているかどうかを調べようとしているだけの場合。上記のように、正規表現を使用してスキップできます。部分文字列を使用して、最初の文字を削除し、それが数字かどうかをテストします。

数値全体を削除しようとしている場合は、文字列をchar配列に変換して、charsをテストします。

擬似文字列s = "" charsの各cに対して{cが数値の場合はs + = cそうでなければexit} sを整数に変換すると、文字列の先頭の数値が得られます。

0
Yogurt The Wise