如何提取符号后的单词?

时间:2010-09-21 20:40:20

标签: c# string

我有一个字符串可以包含任何句子,但该字符串中的某个地方将是@符号,后跟附加的单词,有点像你在某些网站上看到的@username。

所以也许字符串是“嘿你好吗”或者是“@john嘿你好吗”。

如果字符串中有“@”,我想将其后面的内容拉到自己的新字符串中。

在这种情况下如何将“john”拉入不同的字符串中,以便理论上可以通知此人他的新消息?我正在尝试使用string.contains或.replace,但我很新并且很难过。

这个btw在c#asp.net

7 个答案:

答案 0 :(得分:6)

您可以同时使用SubstringIndexOf方法来实现此目标。

我希望这会有所帮助。

谢谢, 达米安

答案 1 :(得分: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);

}

答案 2 :(得分: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表示除空白之外的任何其他内容。这意味着它还会使hey @john, how are you => john,@john123 => john123这可能是错的。也许[a-zA-Z]或类似的更适合你(取决于用户名由哪些字符组成)。如果您提供更多示例,我可以调整它:)

我可以推荐这个页面:

http://www.regular-expressions.info/

以及可以测试语句的工具:

http://regexlib.com/RESilverlight.aspx

答案 3 :(得分:1)

解决此问题的最佳方法是使用正则表达式。你可以找到一个很棒的资源here

使用RegEx,您可以搜索您所追求的模式。我总是要参考一些文档写一个......

这是一个开头的模式 - “@(\ w +)” - @将匹配,然后括号将指示您想要的内容。 “\ w”表示您只希望单词字符匹配(a-z或A-Z),“+”表示一行中应该有一个或多个单词字符。

答案 4 :(得分:1)

RegularExpressions。不知道C#,但RegEx将是

/(@[\w]+) / - parans中的所有内容都在特殊变量中捕获,或附加到RegEx对象。

答案 5 :(得分:1)

你可以试试Regex ......

我认为会是这样的

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

答案 6 :(得分:0)

使用此:

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

DoSomething(string foundName)是一个处理名称的函数(在@之后找到) 这将找到stringToSearch

中的所有@names