Как извлечь слово после символа? - PullRequest
3 голосов
/ 22 сентября 2010

У меня есть строка, в которой может быть любое предложение, но где-то в этой строке будет символ @, за которым следует присоединенное слово, вроде @username, которое вы видите на некоторых сайтах.

так что, возможно, строка "привет, как дела" или "@joh, привет, как дела?"

ЕСЛИ в строке есть «@», я хочу вывести то, что следует сразу после него, в свою новую строку.

в этом случае, как я могу вывести "john" в другую строку, чтобы теоретически уведомить этого человека о его новом сообщении? я пытаюсь поиграть со string.contains или .replace, но я новичок и мне трудно.

это кстати в c # asp.net

Ответы [ 7 ]

6 голосов
/ 22 сентября 2010

Вы можете использовать вместе методы Подстрока и IndexOf .

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

Спасибо, Дамиан

5 голосов
/ 22 сентября 2010

Вот как вы делаете это без регулярных выражений:

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 голосов
/ 22 сентября 2010

Вы должны действительно выучить регулярные выражения. Это будет работать для вас:

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

1 голос
/ 22 сентября 2010

Вы можете попробовать Regex ...

Я думаю, будет что-то вроде этого

string userName = Regex.Match(yourString, "@(.+)\\s").Groups[1].Value;
1 голос
/ 22 сентября 2010

RegularExpressions. Не знаю C #, но RegEx будет

/(@[\w]+) / - Все в паране записывается в специальную переменную или присоединяется к объекту RegEx.

1 голос
/ 22 сентября 2010

Лучший способ решить эту проблему - использовать регулярные выражения.Вы можете найти отличный ресурс здесь .

Используя RegEx, вы можете искать нужный вам шаблон.Мне всегда нужно обращаться к какой-либо документации, чтобы написать одну ...

Вот шаблон, с которого нужно начинать - "@ (\ w +)" - символ @ будет совпадать, а затем в скобках будет указано, что выхочу, что последует.«\ W» означает, что вы хотите совпадать только с символами слова (az или AZ), а «+» означает, что в строке должен быть один или несколько символов слова.

0 голосов
/ 22 сентября 2010

Используйте это:

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

DoSomething(string foundName) - это функция, которая обрабатывает имя (встречается после @).
Это найдет все @ имена в stringToSearch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...