Регулярное выражение в C#

alya_6

Client
Регистрация
27.08.2018
Сообщения
172
Благодарностей
19
Баллы
18
Здравствуйте! Второй день бьюсь с регуляркой на C# и не могу победить.

Использую такой C# код (это get-запрос для получения первого видео по запросу на youtube.com):
C#:
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string query = project.Variables["tovar_h1"].Value;
string url = "https://www.youtube.com/results?search_query=" + query;

// GET запрос
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = userAgent;
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string resultGet = reader.ReadToEnd();
response.Close();
reader.Close();

// Парсим id первого ролика
Match match = Regex.Match(resultGet), "(?<=v=).*?(?=\")";
if (!match.Success) return null;
return match.Value;
В итоге ругается на регулярку ошибками:
Компиляция кода Ошибка в действии "CS1001" "Ожидался идентификатор". [Строка: 15; Cтолбец: 39]

Пробовала менять регулярку, вылезают такие ошибки:
Компиляция кода Ошибка в действии "CS1010" "Символ новой строки в константе". [Строка: 15; Cтолбец: 56]
Компиляция кода Ошибка в действии "CS1009" "Нераспознанная управляющая последовательность". [Строка: 15; Cтолбец: 50]

Регулярку составляла в конструкторе регулярок (PM) и проверяла тут: https://regex101.com/r/fC3pM3/17, регулярка правильная.
Пробовала разные варианты регулярки:
(?<=v=).*?(?="")
@(?<=v=).*?(?="")
и т.д. и т.п.

Кусок кода, на котором проверяла регулярку:
HTML:
<a id="thumbnail" class="yt-simple-endpoint inline-block style-scope ytd-thumbnail" aria-hidden="true" tabindex="-1" rel="null" href="/watch?v=KYbtBUsoRzo">
  <yt-img-shadow ftl-eligible="" class="style-scope ytd-thumbnail no-transition" style="background-color: transparent;" loaded=""><!--css-build:shady--><img id="img" class="style-scope yt-img-shadow" alt="" width="360" src="https://i.ytimg.com/vi/KYbtBUsoRzo/hq720.jpg?sqp=-oaymwEZCNAFEJQDSFXyq4qpAwsIARUAAIhCGAFwAQ==&amp;rs=AOn4CLDCerzYpPUGkVtIaRgLrPqY4kydYA"></yt-img-shadow>
 
  <div id="overlays" class="style-scope ytd-thumbnail"><ytd-thumbnail-overlay-time-status-renderer class="style-scope ytd-thumbnail" overlay-style="DEFAULT"><!--css-build:shady--><yt-icon class="style-scope ytd-thumbnail-overlay-time-status-renderer" disable-upgrade="" hidden=""></yt-icon><span class="style-scope ytd-thumbnail-overlay-time-status-renderer" aria-label="2 часа 54 минуты 21 секунда">
  2:54:21
</span></ytd-thumbnail-overlay-time-status-renderer><ytd-thumbnail-overlay-now-playing-renderer class="style-scope ytd-thumbnail"><!--css-build:shady--><span class="style-scope ytd-thumbnail-overlay-now-playing-renderer">Текущее видео</span>
</ytd-thumbnail-overlay-now-playing-renderer></div>
  <div id="mouseover-overlay" class="style-scope ytd-thumbnail"></div>
  <div id="hover-overlays" class="style-scope ytd-thumbnail"></div>
</a>
Помогите, пожалуйста, в какую сторону хоть смотреть?
 

volody00

Client
Регистрация
06.09.2016
Сообщения
794
Благодарностей
812
Баллы
93
Попробуйте так
C#:
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string query = project.Variables["tovar_h1"].Value;
string url = "https://www.youtube.com/results?search_query=" + query;

// GET запрос
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = userAgent;
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string resultGet = reader.ReadToEnd();
response.Close();
reader.Close();

// Парсим id первого ролика
Regex r = new Regex(@"(?<=v=).*?(?=\"")");
string result = r.Match(resultGet).Value;
return result;
 
  • Спасибо
Реакции: alya_6

alya_6

Client
Регистрация
27.08.2018
Сообщения
172
Благодарностей
19
Баллы
18
Попробуйте так
C#:
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string query = project.Variables["tovar_h1"].Value;
string url = "https://www.youtube.com/results?search_query=" + query;

// GET запрос
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = userAgent;
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string resultGet = reader.ReadToEnd();
response.Close();
reader.Close();

// Парсим id первого ролика
Regex r = new Regex(@"(?<=v=).*?(?=\"")");
string result = r.Match(resultGet).Value;
return result;
Спасибо! Заработало)

Только пустое значение возвращает, но это уже другая история.
 

volody00

Client
Регистрация
06.09.2016
Сообщения
794
Благодарностей
812
Баллы
93
Спасибо! Заработало)

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

alya_6

Client
Регистрация
27.08.2018
Сообщения
172
Благодарностей
19
Баллы
18
когда регулярку будете вставлять, ставьте перед ней @ и все кавычки внутри регулярки экранируйте кавычками "
Я такую регулярку использую:
(@"(?<=v=).*?(?=\"")")

совпадает с вашим советом.
 

alya_6

Client
Регистрация
27.08.2018
Сообщения
172
Благодарностей
19
Баллы
18
Обновила User-Agent мозиллы на более свежий, заработало.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)