Как получить конкретное значение из группировки совпадений Regex в C # - PullRequest
0 голосов
/ 28 сентября 2018

Я работаю над получением screen_name и tweetid из URL-адресов Twitter на основе соответствия групп регулярных выражений.

(http(s)?:\/\/)(?:www.)?twitter\.com\/@?(#!\/)?(?<screenname>[a-zA-Z0-9_]{1,15})(?:\/status(?:es)?\/)?(?<tweetid>\d+)?

Мне удалось получить Twitter screen_name и tweetid по следующим ссылкам:

Однако я мог быНе получили правильные значения screen_name и tweetid по следующим ссылкам:

Я попробовал некоторые измененияв регулярном выражении, но не удалось заставить его работать по указанным выше ссылкам.

Это коды, которые я использовал для обработки этого регулярного выражения.

Regex test = new Regex(@"(http(s)?:\/\/)(?:www.)?twitter\.com\/@?(#!\/)?(?<screenname>[a-zA-Z0-9_]{1,15})(?:\/status(?:es)?\/)?(?<tweetid>\d+)?", RegexOptions.Compiled | RegexOptions.IgnoreCase);
var matches = test.Matches("https://twitter.com/BeastsMovieUK/status/1042682155590197248");
Match m = null;
if (matches.Count > 0)
{
    foreach (Match match in matches)
    {
        if (match.Groups["tweetid"].Success)
        {
            m = match;
            Console.WriteLine("tweetid: {0}", m);
            break;
        }

        if (match.Groups["screenname"].Success)
        {
            m = match;
            Console.WriteLine("screenname: {0}", m);
        }
    }
}
Console.WriteLine("tweetid result: {0}", m.Groups["tweetid"]);
Console.WriteLine("screenname result: {0}", m.Groups["screenname"]);

Это мой рабочий пример: https://dotnetfiddle.net/wPoCSY

1 Ответ

0 голосов
/ 28 сентября 2018

Если ваши два URL всегда будут в одном и том же формате, вы всегда можете просто использовать Split для них.Вот рабочий пример:

https://dotnetfiddle.net/Dda0if

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