0

私はC#を使用していますが、ある場所で、すべての人の名前とその電子メールIDの形式のリストを取得しました。

name(email)\n

私はちょうど私の頭からこのサブストリングのものを持ってきました。私は、よりエレガントで高速(アクセス時間、実行する操作の点で)、これを行うためのコード行を覚えやすいものを探しています。

string pattern =  "jackal(jackal@gmail.com)";
string email = pattern.SubString(pattern.indexOf("("),pattern.LastIndexOf(")") - pattern.indexOf("("));

//extra
string email =  pattern.Split('(',')')[1];

上記を実行すると、文字のインデックスが見つかるまで、各文字に順次アクセスできると思います。名前が短いので今は問題なく動作しますが、大きな名前を付けると苦労します(人々が名前を持っていないことを願っています)

4

2 に答える 2

0

汚いハックはマイクロソフトにあなたのためにそれをさせることでしょう。

try
{
    new MailAddress(input);
    //valid
}
catch (Exception ex)
{
    // invalid
}

カスタム正規表現よりも優れた仕事をしてくれることを願っています。

すべてを処理するカスタム正規表現を維持するには、ある程度の努力が必要になる場合があります。

参照:MailAddress

あなたのフォーマットは実際にはいくつかのサポートされているフォーマットに非常に近いです。()内のテキストはコメントとして扱われますが、(<および)を>に置き換えて、サポートされている形式を取得するとします。

于 2012-07-09T09:28:01.387 に答える
0

Substring()の2番目のパラメーターは、終了インデックスではなく、取得する文字列の長さです。

コードは次のようになります。

string pattern = "jackal(jackal@gmail.com)";

int start = pattern.IndexOf("(") + 1;
int end = pattern.LastIndexOf(")");
string email = pattern.Substring(start, end - start);

または、正規表現を見て、区切り文字を除外しながら2つの文字の間に含まれる文字列を見つけます。

于 2012-07-09T09:29:26.380 に答える