3


0

記号に続く単語を抽出する方法は?

任意の文を含めることができる文字列がありますが、その文字列のどこかに@記号があり、その後に添付された単語が続きます。

したがって、文字列は「お元気ですか」または「@john heyお元気ですか」です。

文字列に「@」が含まれている場合、その直後の文字列を独自の新しい文字列にプルします。

この例では、どのようにして「john」を別の文字列に入れて、理論的にこの人に彼の新しいメッセージを通知できますか? string.containsまたは.replaceで遊んでいますが、かなり新しくて苦労しています。

このbtwはc#asp.netにあります

7 Answer


6


Substringおよびhttp://msdn.microsoft.com/en-us/library/kwb0bwyd.aspx[IndexOf]メソッドを使用できます。一緒にこれを達成します。

これが役に立つことを願っています。

ありがとう、ダミアン


5


正規表現なしで行う方法は次のとおりです。

string s = "hi there @john how are you";

string getTag(string s)
{
    int atSign = s.IndexOf("@");

    if (atSign == -1) return "";

    // start at @, stop at sentence or phrase end
    // I'm assuming this is English, of course
    // so we leave in ' and -
    int wordEnd = s.IndexOfAny(" .,;:!?", atSign);

    if (wordEnd > -1)
        return s.Substring(atSign, wordEnd - atSign);
    else
        return s.Substring(atSign);

}


3


あなたは本当に正規表現を学ぶべきです。 これはあなたのために働くでしょう:

using System.Text.RegularExpressions;

var res = Regex.Match("hey @john how are you", @"@(\S+)");

if (res.Success)
{
    //john
    var name = res.Groups[1].Value;
}

最初の出現を見つけます。 すべてを検索する場合は、 `Regex.Matches`を使用できます。 `\ S`は空白以外を意味します。 これは、「ちょっと@john、お元気ですか」⇒「john」、および「@ john123」⇒「john123」も間違っている可能性があることを意味します。 「[a-zA-Z]」などの方が適しているかもしれません(ユーザー名がどの文字で構成されているかによって異なります)。 あなたがより多くの例を与えるなら、私はそれを調整することができます:)

このページをお勧めします:

ステートメントをテストできるこのツール:


1


これを解決する最良の方法は、正規表現を使用することです。 すばらしいリソースhttp://www.regular-expressions.info/dotnet.html [こちら]を見つけることができます。

RegExを使用すると、目的のパターンを検索できます。 私は常にいくつかのドキュメントを参照して作成する必要があります…​

「@(\ w )」で始まるパターンは次のとおりです。@が一致し、括弧が後に続くものが必要であることを示します。 「\ w」は、一致する単語文字(a〜zまたはA〜Z)のみを意味し、「」は1つ以上の単語文字が連続していることを示します。


1


RegularExpressions。 C#を知らないが、正規表現は

/(@ [\ w] +)/-パラメータ内のすべてが特別な変数にキャプチャされるか、RegExオブジェクトに添付されます。


1


正規表現を試すことができます…​

このようなものになると思います

string userName = Regex.Match(yourString, "@(.+)\\s").Groups[1].Value;


0


これを使って:

var r = new Regex(@"@\w+");
foreach (Match m in r.Matches(stringToSearch))
    DoSomething(m.Value);

`DoSomething(string foundName)`は、名前(@の後にある)を処理する関数です。 +これにより、 `stringToSearch`ですべての@nameが検索されます。