Регулярное выражение в 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
Сообщения
979
Благодарностей
1 067
Баллы
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
Сообщения
979
Благодарностей
1 067
Баллы
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)