0

我正在寻找字符串中的匹配项,对匹配项执行操作,然后替换原始匹配项。

例如,在字符串中查找 @yahoo,查找将 & 符号后面的所有内容与第一个空格匹配。当然,可以在一个字符串中匹配多个值,因此每个匹配项都是一个。

我正在考虑正则表达式,但不确定是否将与号之后的所有内容都匹配到第一个空格(这个正则表达式?)。或者任何其他更简单的方法?

4

7 回答 7

4

为了这:

正在寻找将&符号之后的所有内容与第一个空格匹配

正则表达式是@\S+.

参考:字符类

于 2012-06-04T14:28:33.247 回答
2

假设您正确设置了 Regex,您可以利用Regex.Replace的重载之一来包含MatchEvaluator委托。这MatchEvaluator是一个Func<Match,string>委托(意味着任何public string Method(Match match)方法都可以作为输入),返回值是您要替换原始字符串的值。搜索的正则表达式(@\S+)表示“匹配@符号,后跟任何非空白字符 ( \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

你的意思是 &&或 at-symbol @

这应该做你需要的: &([\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()。

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 回答