Нужен хелп с RegEx...
От: dvd00  
Дата: 24.08.05 14:57
Оценка:
Здравствуйте!

у меня есть такая строка: <a href='abc.aspx?param1=value1'>123456</a>. Я хочу с помощью регулярного выражения выщемить 123456. Вот как я это делаю сейчас:

string sValue           = "<a href='abc.aspx?param1=value1'>123456</a>";
Regex regExp            = new Regex(@"<[^>]*>([^<]*)</[^>]*>");
MatchCollection matches = regExp.Matches(sValue);
string s                = matches[1].ToString();
//string s              = matches[0].ToString(); - возвращает всю строку.


При таком подходе matches[1].ToString() падает с исключением выхода за границы массива, т.е. регулярное выражение не выщемливает нужную мне подстроку. Может мне кто-нибудь пояснить, где я ошибаюсь в паттерне регулярного выражения?

Спасибо за потраченное время.
Re: Нужен хелп с RegEx...
От: Kubyshev Andrey  
Дата: 24.08.05 15:17
Оценка:
Не обязательно описывать всю строку.


Можно с хвоста начать. Типа: new Regex(@">([\d]*)</a>$");

А если нет больше цифр то и того проще :new Regex(@"([\d]*)");

disclaimer or warranty: not tested.
Re[2]: Нужен хелп с RegEx...
От: dvd00  
Дата: 24.08.05 15:41
Оценка:
Здравствуйте, Kubyshev Andrey, Вы писали:

KA>Не обязательно описывать всю строку.



KA>Можно с хвоста начать. Типа: new Regex(@">([\d]*)</a>$");


KA>А если нет больше цифр то и того проще :new Regex(@"([\d]*)");


KA>disclaimer or warranty: not tested.


В том-то и дело, что не пашеть... Даже такой вариант как


new Regex(@">([^<]*)<");


не катит, хотя почему — совершенно не могу понять "\d" — не подходит, ибо могут не только цифры быть на том месте...

Еще какие-нить идеи есть???
Re: Нужен хелп с RegEx...
От: algol Россия about:blank
Дата: 24.08.05 15:42
Оценка:
Здравствуйте, dvd00, Вы писали:

D>у меня есть такая строка: <a href='abc.aspx?param1=value1'>123456</a>. Я хочу с помощью регулярного выражения выщемить 123456. Вот как я это делаю сейчас:


Я бы примерно так сделал:

Regex.Matches(sValue, @"<a\s.+?>(.*?)</a>", RegexOptions.IgnoreCase);
Re[2]: Нужен хелп с RegEx...
От: dvd00  
Дата: 24.08.05 16:36
Оценка:
Здравствуйте, algol, Вы писали:

A>Здравствуйте, dvd00, Вы писали:


D>>у меня есть такая строка: <a href='abc.aspx?param1=value1'>123456</a>. Я хочу с помощью регулярного выражения выщемить 123456. Вот как я это делаю сейчас:


A>Я бы примерно так сделал:


A>
A>Regex.Matches(sValue, @"<a\s.+?>(.*?)</a>", RegexOptions.IgnoreCase);
A>



Мот я и тупой не в меру, но кто нить пытался запустить свой код перед тем как советовать??? ничего ведь не работает, хотя я абсолютно согласен с Вашим мнением, что "ДОЛЖНО РАБОТАТЬ!!!" Однако НЕ работает!!!
Re: Нужен хелп с RegEx...
От: xinta4 Россия  
Дата: 24.08.05 17:05
Оценка: 3 (1)
Здравствуйте, dvd00, Вы писали:

D>Здравствуйте!


D>у меня есть такая строка: <a href='abc.aspx?param1=value1'>123456</a>. Я хочу с помощью регулярного выражения выщемить 123456. Вот как я это делаю сейчас:


D>
D>string sValue           = "<a href='abc.aspx?param1=value1'>123456</a>";
D>Regex regExp            = new Regex(@"<[^>]*>([^<]*)</[^>]*>");
D>MatchCollection matches = regExp.Matches(sValue);
D>string s                = matches[1].ToString();
D>//string s              = matches[0].ToString(); - возвращает всю строку.
D>


D>При таком подходе matches[1].ToString() падает с исключением выхода за границы массива, т.е. регулярное выражение не выщемливает нужную мне подстроку. Может мне кто-нибудь пояснить, где я ошибаюсь в паттерне регулярного выражения?


D>Спасибо за потраченное время


У тебя в matches будет всего 1 match. Вот в нём и смотри вторую группу, если нужно “123456”. Вот как будет выглядеть правильно твой пример:
string sValue           = "<a href='abc.aspx?param1=value1'>123456</a>";
Regex regExp            = new Regex(@"<[^>]*>([^<]*)</[^>]*>");
MatchCollection matches = regExp.Matches(sValue);
string s = matches[0].Groups[1].ToString();
Re[3]: Нужен хелп с RegEx...
От: Kubyshev Andrey  
Дата: 24.08.05 17:46
Оценка:
D>Мот я и тупой не в меру, но кто нить пытался запустить свой код перед тем как советовать??? ничего ведь не работает, хотя я абсолютно согласен с Вашим мнением, что "ДОЛЖНО РАБОТАТЬ!!!" Однако НЕ работает!!!

Может за тебя и программу написать ?
Re[4]: Нужен хелп с RegEx...
От: dvd00  
Дата: 25.08.05 06:12
Оценка:
Здравствуйте, Kubyshev Andrey, Вы писали:

D>>Мот я и тупой не в меру, но кто нить пытался запустить свой код перед тем как советовать??? ничего ведь не работает, хотя я абсолютно согласен с Вашим мнением, что "ДОЛЖНО РАБОТАТЬ!!!" Однако НЕ работает!!!


KA>Может за тебя и программу написать ?


Я же не говорил о потребности написать программу, я всего лишь заметил, что приводимые рекомендации не слишком удачно работают, вот и все. Да и речь идет всего лишь об одном регулярном выражении.
Re[2]: Нужен хелп с RegEx...
От: dvd00  
Дата: 25.08.05 14:35
Оценка:
Здравствуйте, xinta4, Вы писали:

X>Здравствуйте, dvd00, Вы писали:


D>>Здравствуйте!


D>>у меня есть такая строка: <a href='abc.aspx?param1=value1'>123456</a>. Я хочу с помощью регулярного выражения выщемить 123456. Вот как я это делаю сейчас:


D>>
D>>string sValue           = "<a href='abc.aspx?param1=value1'>123456</a>";
D>>Regex regExp            = new Regex(@"<[^>]*>([^<]*)</[^>]*>");
D>>MatchCollection matches = regExp.Matches(sValue);
D>>string s                = matches[1].ToString();
D>>//string s              = matches[0].ToString(); - возвращает всю строку.
D>>


D>>При таком подходе matches[1].ToString() падает с исключением выхода за границы массива, т.е. регулярное выражение не выщемливает нужную мне подстроку. Может мне кто-нибудь пояснить, где я ошибаюсь в паттерне регулярного выражения?


D>>Спасибо за потраченное время


X>У тебя в matches будет всего 1 match. Вот в нём и смотри вторую группу, если нужно “123456”. Вот как будет выглядеть правильно твой пример:

X>
X>string sValue           = "<a href='abc.aspx?param1=value1'>123456</a>";
X>Regex regExp            = new Regex(@"<[^>]*>([^<]*)</[^>]*>");
X>MatchCollection matches = regExp.Matches(sValue);
X>string s = matches[0].Groups[1].ToString();
X>


Вот это я понимаю — вот это совет! "Все судьи 5 баллов ровно!" (с) А.В.Масляков.
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.