Regex для поиска URL-адресов SoundCloud с использованием C # / Selenium - PullRequest
1 голос
/ 21 марта 2020

Я пытаюсь найти URL-адреса SoundCloud в строке. Прочитав SO, я попробовал несколько различных формул REGEX, ни одна из которых не сработала.

Пример URL

https://soundcloud.com/katyperry

Мое регулярное выражение

 Regex scRegex = new Regex(@"^(https?:\/\/)?(www.)?(m\.)?soundcloud\.com\/[\w\-\.]+(\/)+[\w\-\.]+/?$",
 RegexOptions.IgnoreCase);

Весь код для ясности

 string ps = driver.PageSource;
 string words = string.Join(" ", ps);
 Regex scRegex = new Regex(@"^(https?:\/\/)?(www.)?(m\.)?soundcloud\.com\/[\w\-\.]+(\/)+[\w\-\.]+/?$",
 RegexOptions.IgnoreCase);
 //find items that matches with our pattern
 MatchCollection scMatches = scRegex.Matches(words);
 soundcloud = scMatches[0].ToString();

Кто-нибудь знает, что я делаю не так?

1 Ответ

1 голос
/ 21 марта 2020

Сначала удалите ^ и $, поскольку вы не проверяете строку, а извлекаете из более длинного текста. Во-вторых, экранируйте буквальные точки и не экранируйте / s, так как последние не являются специальными метасимволами регулярных выражений.

Затем используйте

Regex scRegex = new Regex(@"(?:https?://)?(?:www\.)?(?:m\.)?soundcloud\.com(?:/[\w.-]+)+/?");

Или с границей слова в начале:

Regex scRegex = new Regex(@"\b(?:https?://)?(?:www\.)?(?:m\.)?soundcloud\.com(?:/[\w.-]+)+/?");

См. regex demo .

Подробности

  • \b - символ непосредственно перед текущее местоположение должно быть не состоящим из слова char или началом строки
  • (?:https?://)? - необязательная http:// или https:// последовательность символов
  • (?:www\.)? - необязательная www. последовательность символов
  • (?:m\.)? - необязательная m. последовательность символов
  • soundcloud\.com - soundcloud.com подстрока
  • (?:/[\w.-]+)+ - 0 или более повторений
    • / - / символ
    • [\w.-]+ - 1+ слово, . или - символ
  • /? - опционально /.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...