2012-06-04 5 views
0

Я ищу, чтобы найти совпадения в строке, выполнить действие в матче, а затем заменить исходное совпадение.Заменить значения в строке

Например, найти @yahoo в строке, глядя на совпадение всего после амперсанда до первого пробела. Разумеется, в одной строке может быть несколько значений, чтобы они соответствовали друг другу, поэтому для каждого совпадения было бы.

Я думаю о регулярном выражении, но не уверен в том, что вы согласитесь на все после амперсанда до первого пробела (выражение регулярного выражения для этого?). Или любой другой более простой способ сделать это?

+1

Вы должны опубликовать пример строки. Где амперсанд в @yahoo? – Steve

+2

'@' называется [* Коммерческая] на «знак *» (http://en.wikipedia.org/wiki/At_sign), а не * амперсанд * (который выглядит следующим образом: '&'). – dasblinkenlight

ответ

4

Для этого:

смотрит на соответствие все после того, как амперсанд к первому белого пространства

регулярное выражение @\S+.

Код: Character Classes.

+0

Отлично, спасибо. –

0

Например:

string str = "@yahoo aaaa bbb"; 
string replacedStr = str.Replace("@yahoo", "replacement"); 

Смотри документацию: string.Replace

0

ли вы имеете в виду амперсанд & или на-символ @?

Это должно делать то, что вам нужно: &([\S\.]+)\b

или на-символ: @([\S\.]+)\b

+0

Это не работает для @ yahoo.com (в соответствии с запросом OP, вам нужно соответствовать всем до первого места) – Steve

+0

@Steve Спасибо. Я изменил его так, что он будет ловить '.'. –

1

Если вы пишете в C#, регулярное выражение, вероятно, ваш лучший вариант. Код довольно прост

MatchCollection matches = Regex.Matches(/*input*/, /*pattern*/) 
foreach (Match m in matches) 
{ 
    /*Do work here*/ 
} 

Для изучения регулярных выражений и синтаксис, связанный, я использовал http://www.regular-expressions.info/tutorial.html, чтобы начать. Много хорошей информации там, и легко читать.

0

Попробуйте использовать string.replace функции():

String x="lalala i like being @Yahoo , my Email is [email protected]"; 

x=x.Replace("@Yahoo","@Gmail"); 

X теперь будет: "Лалала я люблю быть @Gmail, моя электронная почта [email protected]";

Чтобы узнать, где следующее пространство после «@Yahoo», используйте переменную location, используя 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. 

Надеюсь, что это поможет.

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. (обратите внимание, что она включает в себя punctiation на @matching.).

Надеюсь, что это поможет!

+0

Та же проблема ответа Дэвида. Этот шаблон не соответствует полной строке '@ yahoo.com', но только' @ yahoo' – Steve

+0

Это немного упрощает. См. Мое редактирование ... – SPFiredrake

+0

+1, теперь ваш шаблон идентичен принятому ответу, но вы также пытаетесь ответить на другую часть вопроса. – Steve

0

Я думаю, что RegEx.Replace - ваш лучший выбор. Вы можете просто сделать что-то вроде этого:

string input = "[email protected] 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"; 
    } 
} 
Смежные вопросы