0

Получаю HTML код страницы. В нём есть поле вида:

<input type="hidden" id="regid" name="input_shadow" value="7a312BBBsaKq9rg32asf5ej11djaqvwks">

Необходимо вытащить из этого поля значение 7a312BBBsaKq9rg32asf5ej11djaqvwks, используя регулярное выражение. Язык программирования: C#. Требуется совет в организации такого регулярного выражения.

Egor
  • 987
  • Регулярки для разбора HTML — плохое средство. Вам сюда. – VladD Nov 06 '16 at 12:30
  • @VladD, спасибо, но мне нужно именно регуляркой, чтобы научиться брать кавычки в кавычки – Egor Nov 06 '16 at 12:44
  • 2
    С кавычками-то проще всего, заэкранируйте их при помощи \. Но всё равно использовать регулярки я бы не советовал. – VladD Nov 06 '16 at 13:17

2 Answers2

2
string input = @"<input type=""hidden"" id=""regid"" name=""input_shadow"" value=""7a312BBBsaKq9rg32asf5ej11djaqvwks"">";
        Regex regex = new Regex(@"(?<=\bvalue\s*=\s*[""'])[^""']*");
        Match match = regex.Match(input);
        string value = match.Value;
Bulson
  • 9,411
  • 1
    Я бы ещё предусмотрел возможное наличие пробелов до и после знака равно, а также одинарные кавычки: (?<=\bvalue\s*=\s*[""'])[^""']*. – Alexander Petrov Nov 06 '16 at 16:08
  • @AlexanderPetrov ОК. Нет предела для совершенства :) – Bulson Nov 06 '16 at 16:21
1

Как-то так:

(?<=value=").+?(?=")

В самом коде как-то так:

string text = "<input type=\"hidden\" id=\"regid\" name=\"input_shadow\" value=\"7a312BBBsaKq9rg32asf5ej11djaqvwks\">";
string regEx = "(?<=value=\").+?(?=\")";
string match = Regex.Match(text, regEx).Value;

P.S А не проще ли это интерпритировать как XML и считать значение нужного атрибута по имени?

iluxa1810
  • 24,899