Использование Regex для изменения строки в C # (на основе функции ActionScript) - PullRequest
1 голос
/ 02 ноября 2010

У меня есть код ActionScript, который разбивает строку с помощью регулярного выражения и позволяет мне добавлять содержимое в место разделения.

// AS3 Code
function formatTweetText(tweet:String ):String
    {
        var regUrl:RegExp = /http:\/\/\S+/g;
        var _text:String = " "+ tweet + " ";                            
        _text = _text.replace(regUrl, '<font color="#666666"> <a href="$&" target="_blank">$&</a></font>');
        _text = _text.substr(1, _text.length-2);
            return _text;
}

Я пытаюсь найти C # эквивалент вышеупомянутой функции

Это дает вам полное текстовое значение, вставляя текст замены, где регулярное выражение находит совпадение.

Например:

var text:String = "Hello there http://www.url.com";

превратится в

var newString:String =  "hello there <font color="#666666"> <a href="http://www.url.com" target="_blank">http://www.url.com</a></font>"

Ответы [ 4 ]

2 голосов
/ 02 ноября 2010
using System.Text.RegularExpressions;

private string formatTweetText(string tweet)
{
    string newText = " " + Regex.Replace(tweet, "/http:\/\/\S+/g", "Replacement String") + " ";
    return newText.SubString(1, (newText.Length - 2));
}
1 голос
/ 02 ноября 2010

Используя комбинацию ответов, здесь есть функция в C #, которая выполняет ту же функцию, что и функция ActionScript.

private string formatTweetText(string tweet)
    {

        Regex regUrl = new Regex(@"http://\S+");
        string url = regUrl.Match(tweet).Value;
        if (url.Length > 0)
        {
            string newReturnVal = string.Format("<font color=\"#FF0000\">{0}</font>", url);
            string returnVal =  tweet.Replace(url, newReturnVal);
            return returnVal;
        }
        else
        {
            return tweet;
        }

    }

Приведенный выше код работает только при первом совпадении, если у вас есть несколько совпаденийвам нужно использовать этот код:

private string formatTweetText(string tweet)
    {

        string returnVal = tweet;
        string updatedValue = tweet;
        Regex regUrl = new Regex(@"http://\S+");
        Match matches = regUrl.Match(tweet);
        while (matches.Success)
        {
            for (int i = 0; i <= 2; i++)
            {
                Group g = matches.Groups[i];
                CaptureCollection cc = g.Captures;
                for (int j = 0; j < cc.Count; j++)
                {
                    Capture c = cc[j];
                    string url = c.Value;
                    if (c.Length > 0)
                    {
                        string newReturnVal = string.Format("<font color=\"#FF0000\">{0}</font>", url);
                        returnVal = updatedValue.Replace(url, newReturnVal);

                    }
                    updatedValue = returnVal;
                }   

            }
            matches = matches.NextMatch();
        }
        return returnVal;

    }
1 голос
/ 02 ноября 2010
Regex regUrl = new Regex(@"http://\S+");
string url = regUrl.Match(tweet).Value;
return string.Format("<font color=\"#666666\"> <a href=\"{0}\" target=\"_blank\">{0}</a></font>", url);
0 голосов
/ 02 ноября 2010

Как это?

string FormatTweetText(string tweet)
{
   string regUrl = "http:\/\/\S+";
   string text = " " + tweet + " ";
   text = Regex.Replace(text, regUrl, 
      "<font color=\"#666666\"> <a href=\"$&\" target=\"_blank\">$&</a></font>");

   text = text.Substring(1, text.Length - 2);
   return text;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...