2017-12-02 6 views
-2

C#を使用して、文字列内で最初に見つからない文字を検出しようとしています。 myStringには、すべて英数字とアンダースコアが使用できます。私は試しました:英数字またはアンダースコアでない文字列内の文字を検索します。

string myString = "[email protected]"; 
int myIndex = Regex.Match(myString, "[^a-zA-Z0-9_]*$").Index; 

結果は明らかにmyStringの長さです。したがって、式ではインデックス10のアンパサンドは検出されませんでした。

+0

これはアンパサンドではありません。&は、アットマークである@ – Pac0

+0

int myIndex = Regex.Match(myString、@ "\ W")です。インデックス; ' – ClasG

+0

@ClasGが私の質問に答えました。ありがとうございました。 – Jaro

答えて

1

私は通常、LINQを使用したい:

var index = myString.IndexOf(
     string.Join("", myString.SkipWhile(c => char.IsLetterOrDigit(c) || c == '_').Take(1)), 
     StringComparison.Ordinal); 

ちょうど最初のごusingディレクティブにusing System.Linq;を追加することを忘れないでください。

+0

私は正規表現でそれを行う方法を見つけることができなかった場合、私が実装する同様のソリューション。ありがとうございました。 – Jaro

0

私の質問はコメントで@ClasGで答えた:

int myIndex = Regex.Match(myString, @"\W").Index; 
0

は少しあなたの正規表現を変更します。

string myString = "[email protected]"; 
int myIndex = Regex.Match(myString, "[^a-zA-Z0-9_]").Index; 

あなたの試合はでなければならなかったことを意味し、*$を持っていました($のため)、最後にゼロ以上(*のため)非英数字がありました。もちろん、終わり(インデックス19)は一致しました。

これら2つの文字がないと、文字列内のどこでも、非英数字の1つに正確に一致します。

関連する問題