Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
a.n.o.n.i.m
137 / 137 / 39
Регистрация: 26.02.2011
Сообщений: 535
1

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

20.06.2013, 12:22. Просмотров 834. Ответов 10
Метки нет (Все метки)

C#
1
2
            Regex dataRegex3 = new Regex(@"Регулярка");
            string str3 = dataRegex3.Match(txt).Groups["data"].Value;
Дайте регулярку для поиска такого вида

Код
				<th>Рейтинг:</th>
				<td>12</td>
				<td></td>
Соответствено надо спарсить число 12,как это сдалать?

Добавлено через 17 часов 17 минут
не знает никто?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2013, 12:22
Ответы с готовыми решениями:

Регулярное выражение
Здраствуйте, помогине пожалуйста есть html код : Нужно вытащить слова...

Регулярное выражение
помогите пожалуууйста с программой на регулярные выражения!!!!Дана строка, в...

Регулярное выражение
регулярка: &quot;\\b&quot; + blue + &quot;\\b&quot;, ищет слова, которые компилятор выделяет синим...

Регулярное выражение на c#
Помогите, пожалуйста, с помощью регулярки на языке c# из следующего текста...

Регулярное выражение
язык регулярных выражений интерпретируйте следующий шаблон: (\w+)\s(\1) не...

10
Winhttp22
152 / 123 / 22
Регистрация: 16.02.2013
Сообщений: 820
20.06.2013, 12:34 2
C#
1
@"<td>(\d+)<\/td>"
1
a.n.o.n.i.m
137 / 137 / 39
Регистрация: 26.02.2011
Сообщений: 535
20.06.2013, 13:22  [ТС] 3
Не помогает.Как спарсить этот рейтинг,уже много чего перепробовал,не берет его и все,подскажите
Пробовал так

C#
1
2
3
4
            string txt = reader3.ReadToEnd();
 
            Regex dataRegex3 = new Regex(@"Рейтинг:</th>\r\t\t\t\t<td>(?<data>.*)</td>");
            string str3 = dataRegex3.Match(txt).Groups["data"].Value;
Вот с этого кода

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<table width="100%" cellspacing="0" cellpadding="0">
<tbody>
    <tr>
        <td style="width:19px">&nbsp;</td>
        <td>
        <table class="user-info-tbl">
            <colgroup>
                <col width="170" />
                <col />
                <col width="20" />
            </colgroup>
            <tbody>
            <tr class="first">
                <th>Рейтинг:</th>
                <td>12</td>
                <td></td>
            </tr>
            <tr>
                <th>Посещаемость:</th>
                <td>43</td>
                <td></td>
            </tr>
                                                <tr>
                <th>Пол:</th>
                <td>Мужской                </td>
                <td>&nbsp;</td>
            </tr>
                                    
            <tr>
                <th>На сайте:</th>
                <td>3 года и 7 месяцев</td>
                <td></td>
            </tr>
            <tr>
                <th>Дата регистрации:</th>
                <td>10.11.2009</td>
                <td></td>
            </tr>
                                                
            
    
</tbody>
</table>
1
Winhttp22
152 / 123 / 22
Регистрация: 16.02.2013
Сообщений: 820
20.06.2013, 14:01 4
a.n.o.n.i.m, как НЕ помогает?

Добавлено через 9 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
 
namespace ConsoleApplication6
{
    internal class Program
    {
        private static void Main()
        {
            string res=@"<table width=""100%"" cellspacing=""0"" cellpadding=""0"">
<tbody>
    <tr>
        <td style=""width:19px"">&nbsp;</td>
        <td>
        <table class=""user-info-tbl"">
            <colgroup>
                <col width=""170"" />
                <col />
                <col width=""20"" />
            </colgroup>
            <tbody>
            <tr class=""first"">
                <th>Рейтинг:</th>
                <td>12</td>
                <td></td>
            </tr>
            <tr>
                <th>Посещаемость:</th>
                <td>43</td>
                <td></td>
            </tr>
                                                <tr>
                <th>Пол:</th>
                <td>Мужской                </td>
                <td>&nbsp;</td>
            </tr>
                                    
            <tr>
                <th>На сайте:</th>
                <td>3 года и 7 месяцев</td>
                <td></td>
            </tr>
            <tr>
                <th>Дата регистрации:</th>
                <td>10.11.2009</td>
                <td></td>
            </tr>
                                                
            
    
</tbody>
</table> ";
            
            Console.WriteLine(Regex.Match(res,@"<td>(\d+)<\/td>").Groups[1].Value);
            Console.ReadKey();
        }
    }
}
Выводит - 12!
Другое дело - это то, что у тебя там два совпадения будет, судя по исх. коду. Ячейка же присутствует все равно, даже если рейтинг 0? Поэтому это НЕ критично - у тебя будет находить первую ячейку с числовым значением, а она у тебя отвечает за рейтинг. НО можно еще и привязаться более жестко, и учесть, что ячейка рейтинга может быть пустой -
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
 
namespace ConsoleApplication6
{
    internal class Program
    {
        private static void Main()
        {
            string res=@"<table width=""100%"" cellspacing=""0"" cellpadding=""0"">
<tbody>
    <tr>
        <td style=""width:19px"">&nbsp;</td>
        <td>
        <table class=""user-info-tbl"">
            <colgroup>
                <col width=""170"" />
                <col />
                <col width=""20"" />
            </colgroup>
            <tbody>
            <tr class=""first"">
                <th>Рейтинг:</th>
                <td>12</td>
                <td></td>
            </tr>
            <tr>
                <th>Посещаемость:</th>
                <td>43</td>
                <td></td>
            </tr>
                                                <tr>
                <th>Пол:</th>
                <td>Мужской                </td>
                <td>&nbsp;</td>
            </tr>
                                    
            <tr>
                <th>На сайте:</th>
                <td>3 года и 7 месяцев</td>
                <td></td>
            </tr>
            <tr>
                <th>Дата регистрации:</th>
                <td>10.11.2009</td>
                <td></td>
            </tr>
                                                
            
    
</tbody>
</table> ";
            
            Console.WriteLine(Regex.Match(res,@"Рейтинг:<\/th>\W+<td>(\d+)?<\/td>").Groups[1].Value);
            Console.ReadKey();
        }
    }
}
1
a.n.o.n.i.m
137 / 137 / 39
Регистрация: 26.02.2011
Сообщений: 535
20.06.2013, 16:32  [ТС] 5
парсит,рейтинг и посещаемость,остальные поля не могу допилить,поможете?

Добавлено через 48 минут
а чем можно вот такую конструкцию заменить покрасивее(покороче) для определения пола
C#
1
@"Пол:<\/th>\W+<td>(.+)?\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s<\/td>"
1
Winhttp22
152 / 123 / 22
Регистрация: 16.02.2013
Сообщений: 820
21.06.2013, 17:56 6
@a.n.o.n.i.m, в таком случае наверное лучше все ячейки парсить, чем составлять для каждой - отдельную регулярку -
C#
1
2
string resp="abcd..........";
MatchCollection m=Regex.Matches(resp,@"<td>(.+)<\/td>");
(думаю мысль уловил?)
и уже по номеру смотреть.
1
a.n.o.n.i.m
137 / 137 / 39
Регистрация: 26.02.2011
Сообщений: 535
24.06.2013, 15:45  [ТС] 7
Ух сложно с регулярками,можно пример?
0
FrostByte
101 / 101 / 19
Регистрация: 23.05.2013
Сообщений: 185
24.06.2013, 20:56 8
Попробуйте вот так:
C#
1
<td>(?<data>[\w\d\.\s]+)</td>
Из того HTML кода который вы дали спарсит следующее:

Код
12
43
Мужской
3 года и 7 месяцев
10.11.2009
1
a.n.o.n.i.m
137 / 137 / 39
Регистрация: 26.02.2011
Сообщений: 535
25.06.2013, 10:57  [ТС] 9
Если поробывать вот так вывести
C#
1
 Console.WriteLine(Regex.Match(res, @"<td>(?<data>[\w\d\.\s]+)</td>").Groups["data"].Value);
То выведет 12 ток
1
Psilon
Master of Orion
Эксперт .NET
6008 / 4858 / 902
Регистрация: 10.07.2011
Сообщений: 14,460
Записей в блоге: 5
Завершенные тесты: 4
25.06.2013, 11:51 10
HTMLAgilityPack чем не угодил?
http://www.codeplex.com/htmlagilitypack
0
FrostByte
101 / 101 / 19
Регистрация: 23.05.2013
Сообщений: 185
25.06.2013, 12:08 11
@a.n.o.n.i.m, у меня почемуто выводит только 5 строк. Попробуйте выводить в цикле foreach

C#
1
2
3
4
5
6
7
8
9
10
private static void Main()
    {
        string inpText = File.ReadAllText(@"C:\1.txt", Encoding.Default);
 
        var reg = Regex.Matches(inpText, @"<td>(?<data>[\w\d\.\s]+)</td>");
        foreach (Match match in reg)
        {
            Console.WriteLine(match.Groups["data"].Value);
        }
    }
Регулярное выражение
0
25.06.2013, 12:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2013, 12:08

Регулярное выражение
Помогите написать регулярное выражение на С# для такой строки &lt;form...

Регулярное выражение
Добрый вечер, форумчане! Помогите составить регулярное выражение.. Нужно...

Регулярное выражение
Уже битый час ломаю голову, не пойму как в конце написать регулярное выражение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru