文字列内の一致を検索し、一致に対してアクションを実行してから、元の一致を置き換えたいと考えています。
たとえば、文字列内で@yahooを見つけ、アンパサンド以降のすべてを最初の空白に一致させることを検討します。もちろん、1つの文字列に一致する値が複数ある可能性があるため、一致するたびにになります。
私は正規表現を考えていますが、アンパサンド以降のすべてを最初の空白に一致させるかどうかはわかりません(このための正規表現?)。または、これを行う他の簡単な方法はありますか?
正規表現が正しく設定されていると仮定すると、Regex.Replaceのオーバーロードの1つを利用して、 MatchEvaluatorデリゲートを含めることができます。これMatchEvaluator
はFunc<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.
お役に立てば幸いです。
C#で記述している場合は、正規表現がおそらく最良のオプションです。コードは非常に単純です
MatchCollection matches = Regex.Matches(/*input*/, /*pattern*/)
foreach (Match m in matches)
{
/*Do work here*/
}
正規表現とそれに関連する構文を学習するために、http://www.regular-expressions.info/tutorial.htmlを使用して開始しました。そこにはたくさんの良い情報があり、読みやすいです。
例えば:
string str = "@yahoo aaaa bbb";
string replacedStr = str.Replace("@yahoo", "replacement");
ドキュメントを参照してください: string.Replace
アンパサンド&
またはアットマークの意味@
ですか?
これはあなたが必要とすることをするはずです:
&([\S\.]+)\b
またはアットマークの場合:
@([\S\.]+)\b
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.
お役に立てば幸いです。
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";
}
}