我有一个字符串可以包含任何句子,但该字符串中的某个地方将是@符号,后跟附加的单词,有点像你在某些网站上看到的@username。
所以也许字符串是“嘿你好吗”或者是“@john嘿你好吗”。
如果字符串中有“@”,我想将其后面的内容拉到自己的新字符串中。
在这种情况下如何将“john”拉入不同的字符串中,以便理论上可以通知此人他的新消息?我正在尝试使用string.contains或.replace,但我很新并且很难过。
这个btw在c#asp.net
答案 0 :(得分:6)
答案 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/
以及可以测试语句的工具:
答案 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