0

文字列内の一致を検索し、一致に対してアクションを実行してから、元の一致を置き換えたいと考えています。

たとえば、文字列内で@yahooを見つけ、アンパサンド以降のすべてを最初の空白に一致させることを検討します。もちろん、1つの文字列に一致する値が複数ある可能性があるため、一致するたびにになります。

私は正規表現を考えていますが、アンパサンド以降のすべてを最初の空白に一致させるかどうかはわかりません(このための正規表現?)。または、これを行う他の簡単な方法はありますか?

4

7 に答える 7

4

このため:

アンパサンド以降のすべてを最初の空白に一致させることを検討しています

正規表現は@\S+です。

参照:文字クラス

于 2012-06-04T14:28:33.247 に答える
2

正規表現が正しく設定されていると仮定すると、Regex.Replaceのオーバーロードの1つを利用して、 MatchEvaluatorデリゲートを含めることができます。これMatchEvaluatorFunc<Match,string>デリゲート(任意のpublic string Method(Match match)メソッドが入力として機能することを意味します)であり、戻り値は元の文字列を置き換えたいものです。検索の正規表現は、 「記号に(@\S+)一致し、その後に空白以外の文字( )が少なくとも1回は続く()」という意味です。@\S+

Regex.Replace(input, "(@\S+)", (match) => { /* Replace logic here. */ })

入力で上記の正規表現を実行すると、、、に@yahoo.com is going to be @simple for purposes of @matching.一致します(に点が含まれていることに注意してください)。@yahoo.com@simple@matching.@matching.

お役に立てば幸いです。

于 2012-06-04T14:42:42.607 に答える
1

C#で記述している場合は、正規表現がおそらく最良のオプションです。コードは非常に単純です

MatchCollection matches = Regex.Matches(/*input*/, /*pattern*/)
foreach (Match m in matches)
{
    /*Do work here*/
}

正規表現とそれに関連する構文を学習するために、http://www.regular-expressions.info/tutorial.htmlを使用して開始しました。そこにはたくさんの良い情報があり、読みやすいです。

于 2012-06-04T14:30:55.960 に答える
0

例えば:

string str = "@yahoo aaaa bbb";
string replacedStr = str.Replace("@yahoo", "replacement");

ドキュメントを参照してください: string.Replace

于 2012-06-04T14:29:08.197 に答える
0

アンパサンド&またはアットマークの意味@ですか?

これはあなたが必要とすることをするはずです: &([\S\.]+)\b

またはアットマークの場合: @([\S\.]+)\b

于 2012-06-04T14:30:12.020 に答える
0

String.Replace()関数を使用してみてください。

String x="lalala i like being @Yahoo , my Email is John@Yahoo.com";

x=x.Replace("@Yahoo","@Gmail");

Xは次のようになります: "lalala私は@Gmailであることが好きです、私のメールアドレスはJohn@Gmail.comです";

「@Yahoo」の次のスペースを知るには、String.IndexOf()およびString.LastIndexOf()でlocation変数を使用します。

int location=x.IndexOf("@Yahoo");//gets the location of the first "@Yahoo" of the string.

int SpaceLoc=x.IndexOf("@Yahoo",location);// gets the location of the first white space after the first "@Yahoo" of the string.

お役に立てば幸いです。

于 2012-06-04T14:33:18.210 に答える
0

RegEx.Replaceが最善の策だと思います。あなたは単にこのようなことをすることができます:

string input = "name@yahoo.com is my email address";
string output = Regex.Replace(input, @"@\S+", new MatchEvaluator(evaluateMatch));

そして、次のようなevaluateMatchメソッドを定義する必要があります。

private string evaluateMatch(Match m)
{
    switch(m.Value)
    {
        case "@yahoo.com": 
            return "@google.com";
            break;
        default:
            return "@other.com";
    }
}
于 2012-06-04T14:53:20.450 に答える