Регулярное выражение - текст между двоеточиями

У меня есть такая схема

<h1>
5/2009
<br/>
Question: This is the question
</h1>

Мне нравится получать первую часть после <br/>или всегда строку перед двоеточием:

-> Решение должно быть «Вопрос»

Внимание: эти слова меняются - иногда это вопрос, а иногда может быть большой вопрос ....

Я пытался с, <h1>(.{0,50}):(.{0,50})но это возвращает много (также дата)

Я не обучен регулярным выражениям, кто-нибудь может мне помочь с этим?

Большое спасибо.

13.10.2009 09:54:51
Если кто-то оказал вам помощь в той степени, в которой он является вашим героем, обычно выбирают его ответ - нажмите на галочку под ответом, и он даст 15 баллов ответчику, 2 балла и значок на вас. ,
Jonathan Leffler 14.10.2009 07:10:08
4 ОТВЕТА
РЕШЕНИЕ

Попробуй это:

<br/>([^:]+):
2
13.10.2009 09:57:13
Да. Сначала извлеките содержимое <h1>элемента с помощью анализатора HTML, а затем примените это регулярное выражение.
Svante 13.10.2009 10:02:51

Я считаю, что это будет работать:

<h1>.*?<br />([^:]+):(.*?)</h1>
1
13.10.2009 10:00:20
Может быть , я ошибаюсь, но что необходимость ?в <h1>.*?не .*нулевое среднем или более вхождений любого характера?
Amarghosh 13.10.2009 10:06:06
Да, но он также будет совпадать, <br />что становится проблемой, если <br />в теге h1 имеется более одного тега или если в строке более одного тега h1, к которому вы применяете регулярное выражение. ? делает предыдущий квантификатор ленивым, гарантируя, что остальные совпадают в самом раннем возможном месте.
Tim Pietzcker 13.10.2009 10:13:00
? означает не жадный (то есть совпадение как можно меньше - по умолчанию совпадение максимально возможное). Если страница не используется, а страница содержит два тега <h1>, она получит <h1> от первого и </ h1> от последнего.
rslite 13.10.2009 10:14:06
Спасибо всем. Жадность - хитрая вещь. Googling дал мне этот регулярно-expressions.info/repeat.html Каждый день я узнаю что-то о регулярных выражениях, просто зависая здесь в ТАК !!!
Amarghosh 13.10.2009 10:22:30
но как я могу получить доступ к первой части? с asp.net и c #? я пытаюсь использовать строку RegexGeschaeftstyp = @ "<h1>. *? <br> ([^:] +): (. *?) </ h1>"; MatchCollection RegexGeschaeftstypMatches = Regex.Matches (strSource, RegexGeschaeftstyp); foreach (Match match1 в RegexGeschaeftstypMatches) {Response.Write ("Найдено" + match1.ToString () + "в позиции" + match1.Index + ". <br>"); }
Jack Black 13.10.2009 11:46:46

Подумайте, что вы имеете в виду, и переведите это на язык регулярных выражений. Как указал Гамбо, вы должны использовать [^:]вместо .; причина этого в том, что вы ищете группы символов, которые не являются двоеточиями ( [^:]), а не группы абсолютно любых символов [1] ( .), между которыми есть двоеточия.

Каждый раз, когда вы используете .квантификатор в регулярном выражении, остановитесь и спросите себя, действительно ли вы подразумеваете «любой символ» или вы могли бы выразить свое значение более четко (и получить более точные результаты), используя вместо этого класс символов.

(Нежадные квантификаторы ( .*?) также могут выполнять работу по получению правильных совпадений в подобных случаях, но классы символов по-прежнему являются более ясным выражением намерений для читателей-людей и повышают эффективность, избегая чрезмерного обратного отслеживания для машинных читателей.)

[1] Ну, абсолютно любой символ, с возможным исключением новых строк в зависимости от используемой вами реализации регулярного выражения.

1
13.10.2009 10:05:37

мой мозг затопляет. действительно спасибо всем, кто уже помог.

может быть, кто-то может попытаться помочь снова, это так важно для меня: S?

<ul>
<li>
07.05.2009:
<a href="#1">Test 1</a>
</li>
<li>
05.01.2009:
<a href="#2">Test 2</a>
</li>
</ul>

На этот раз мне нравится читать вторую часть. Лучше всего было бы, если бы я получил оба по отдельности в одном регулярном выражении ..

Итак: 1. 07.05.2009 2. Тест 1

0
14.10.2009 06:35:46
Этот вспомогательный вопрос теперь является отдельным вопросом: stackoverflow.com/questions/1564665/…
Jonathan Leffler 14.10.2009 07:08:33
Пожалуйста, не оставляйте вопросы в качестве ответа.
Jonas Elfström 14.10.2009 07:08:47