Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 60, средняя оценка - 4.70
trolol
1 / 1 / 4
Регистрация: 22.01.2012
Сообщений: 56
#1

Регулярное выражение не срабатывает на перенос строки - C#

23.07.2012, 12:49. Просмотров 9947. Ответов 6
Метки нет (Все метки)

Алоха))
В общем такой сабж.. пытаюсь вытащить все, что между тегами <hr />
Составил вот такую регулярочку (?<=<hr />).*(?=<hr />) - и она вроде как и работает и в тоже время нет, к примеру если в одной строке все, то вытаскивает
HTML5
1
<hr />вытаскиваемый текст<hr />
А если примерно вот так, то уже нет..
HTML5
1
2
<hr />sdvsdv
vsdvsd<hr />
Помогите пожалуйста, я думаю что нужно добавить чтот с переносом строки \n, но как? пока чтот не вкурил
http://www.cyberforum.ru/csharp-beginners/thread705076.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2012, 12:49
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Регулярное выражение не срабатывает на перенос строки (C#):

Регулярное выражение не работает для строки, если в ней есть перенос
вот еще подскажите. Нужно вытащить записи из html. для выражения: &lt;td...

Регулярное выражение. Пропустить перенос на другую строку
Есть большой текстовый файл. Нужно, пользуясь регулярными выражениями, собрать...

Регулярное выражение с переносом строки
E-mail: &lt;/td&gt; &lt;td&gt; test@mail.ru &lt;/td&gt; как мне...

Регулярное выражение на четыре строки
Нужно получить из хтмл кода число 1.1750 Не получается записать регулярное...

регулярное выражение с переносом строки
Всем привет! Даже не будем влезать в c# а как пример Notepad++ жму поиск по...

6
turbanoff
Эксперт Java
4008 / 3743 / 739
Регистрация: 18.05.2010
Сообщений: 9,323
Записей в блоге: 11
Завершенные тесты: 1
23.07.2012, 12:57 #2
У регулярок есть дополнительные опции. Например их можно передать в конструктор класса Regex.
Одна из таких опций - RegexOptions.Singleline, которая указывает на то, что точка (.) будет рассматривать как любой символ, даже и как символ переноса.
1
trolol
1 / 1 / 4
Регистрация: 22.01.2012
Сообщений: 56
23.07.2012, 13:03  [ТС] #3
Цитата Сообщение от turbanoff Посмотреть сообщение
У регулярок есть дополнительные опции. Например их можно передать в конструктор класса Regex.
Одна из таких опций - RegexOptions.Singleline, которая указывает на то, что точка (.) будет рассматривать как любой символ, даже и как символ переноса.
Эмм, а вот в топике _http://www.cyberforum.ru/csharp-beginners/thread244709.html написано
.
Любой символ, кроме перевода строки. Для поиска любого символа, включая перевод строки, можно использовать конструкцию [\s\S] .
ЕЕЕ, Спасибо)) Вот так получилось (?<=<hr />)[\s\S]+?(?=<hr />)
0
FakiR
Level 2
396 / 270 / 48
Регистрация: 22.11.2010
Сообщений: 781
Записей в блоге: 1
Завершенные тесты: 1
23.07.2012, 13:07 #4
(?s)(?<=<hr />).*?(?=<hr />)
1
trolol
1 / 1 / 4
Регистрация: 22.01.2012
Сообщений: 56
23.07.2012, 13:09  [ТС] #5
Цитата Сообщение от FakiR Посмотреть сообщение
(?s)(?<=<hr />).*?(?=<hr />)
А что означает (?s) ?
0
turbanoff
Эксперт Java
4008 / 3743 / 739
Регистрация: 18.05.2010
Сообщений: 9,323
Записей в блоге: 11
Завершенные тесты: 1
23.07.2012, 13:36 #6
Цитата Сообщение от trolol Посмотреть сообщение
А что означает (?s) ?
Как раз и означает Singleline, только задается явно в тексте самой регулярки.
Я бы вам все же порекомендовал использовать RegexOptions. Это позволит сделать саму регулярку значительно проще для чтения и понимания.
0
trolol
1 / 1 / 4
Регистрация: 22.01.2012
Сообщений: 56
23.07.2012, 14:36  [ТС] #7
Цитата Сообщение от turbanoff Посмотреть сообщение
Как раз и означает Singleline, только задается явно в тексте самой регулярки.
Я бы вам все же порекомендовал использовать RegexOptions. Это позволит сделать саму регулярку значительно проще для чтения и понимания.
Сейчас почитаю о RegexOptions
Возникли вопросы, я просто щас глубже к цели копаю и у меня регулярка уже не работает та...
Дело в том, что ниже представлен кусочек из документа откуда нужно спарсить и он повторяется n-ое кол-во раз и в документе примерно вот так
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
  <head>
  </head>
  <body>
    тут то что не нужно, скажем доп инфа
    <br /><hr /><hr /><br />
    то что нужно вытащить
    <br /><hr /><hr /><br />
    то что нужно вытащить
    <br /><hr /><hr /><br />
    то что нужно вытащить
    <br /><hr /><hr /><br />
    <br /><hr /><hr /><br />
    то что нужно вытащить
    <br /><hr /><hr /><br />
  </body>
</html>
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<br /><hr /><hr /><br />
 
 
            <img alt="-" src="/images.gif" />*<b style="color: red;"> Текст</b>
        <a href="javascript:void(0);" id="report_message_">сообщить об ошибке</a><br />
        <b>текст</b><br />
 
    <div style="display: none;" id="error_area_">
        <br />
        <div style="border: 1px dashed red; padding: 10px; width: 350px; text-align: center;">
        <form method="post">
          <input type="hidden" value="" name="taskid" />
          <input type="hidden" value="" name="fioid" />
          <input type="hidden" value="set_message" name="action" />
          <textarea name="message" cols="40" rows="7"></textarea><br /><br />
          <input type="button" value="Отмена" name="cancel" />
          <input type="button" value="Отправить сообщение" name="send_message" />
        </form>
        </div>
        <br />
    </div>
    <p id="status_message_" class="status_message"></p>
    
    
    
    <font size="4" face="Times New Roman">текст</font><br /><br />
 
    <table bordercolor="white" border="0">
                    <tbody><tr valign="middle"><td>
                                                              <img alt="+" src="/images.gif" />
                                            </td><td>
 
                              <input type="image" alt="+" style="vertical-align: middle;" src="/images.gif" />
                            </td><td>
                              
                          </td><td>*<font size="4" face="Times New Roman">текст</font></td></tr>
                                <tr valign="middle"><td>
                                                              *
                                            </td><td>
 
                              <input type="image" alt="+" style="vertical-align: middle;" src="/images.gif" />
                            </td><td>
                              
                          </td><td>*<font size="4" face="Times New Roman">текст</font></td></tr>
                                <tr valign="middle"><td>
                                                              *
                                            </td><td>
 
                              <input type="image" alt="+" style="vertical-align: middle;" src="/images.gif" />
                            </td><td>
                              
                          </td><td>*<font size="4" face="Times New Roman">текст</font></td></tr>
                                <tr valign="middle"><td>
                                                              *
                                            </td><td>
 
                              <input type="image" alt="+" style="vertical-align: middle;" src="/images.gif" />
                            </td><td>
                              
                          </td><td>*<font size="4" face="Times New Roman">текст</font></td></tr>
                    
            
 
    
    </tbody></table>
 
            <br /><div style="border: 1px dashed green; padding: 5px 10px 10px 15px;"><big><b>текст</b></big><br /><font size="4" face="Times New Roman">текст</font></div>
        <br /><hr /><hr /><br />
и я уже пытаюсь использовать регулярку (?<=<hr /><br />)[\s\S]+?(?=<br /><hr />), но чтот не получается..

Добавлено через 48 минут
А нее, все нормально, я просто пробовал все вот тут _http://gskinner.com/RegExr/ и там криво показывало..
0
23.07.2012, 14:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 14:36
Привет! Вот еще темы с решениями:

Регулярное выражение - перевод строки
Читаю файл NB, NM=&quot;&quot;, NA, NM=&quot;&quot;, NB, NM=&quot;&quot;,

Регулярное выражение. Извлечь часть строки
Народ, добрый день. Имеется строка вида: Hostname: 192.168.16.1:1024...

Регулярное выражение: проверить содержимое строки
Запутался в регулярках, как проверить что строка имеет маленькие буквы, числа и...

Регулярное выражение. Достать значение из строки
Как достать значение из строки Xxxx_sssxxw = qw2iddd; asddd Делал так string...


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

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

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