Способ, чтобы RegEx соответствовал номеру без префиксного тега? - PullRequest
1 голос
/ 06 апреля 2009
     1 <span class='Txt9Gray'>Decisions ( </span> 

Я пытаюсь получить 1 из этой строки. До 1 есть еще один span, но я не могу использовать его как маркер, потому что он может меняться от страницы к странице. Есть ли какое-нибудь выражение регулярного выражения, которое может просто захватить 1?

Слово Decisions всегда будет существовать. Это мой основной способ найти эту строку. Вот что я пытался безрезультатно:

  strRegex.Append("(?<strDecisionWins>[^<]+)[\s]*?
  <span class='[\s\w\W]*'>\bDecisions\b \([\s\w\W]*?</span>")

Это продолжает захват spans до фактического 1. Полная строка с указанным выше текстом:

<span class='Txt9Gray'>(T)KOs ( </span> 66.67 <span class='Txt9Gray'>%) </span> <br /> 1 <span class='Txt9Gray'>Decisions ( </span> 33.33 <span class='Txt9Gray'>%) </span> <br />

Проблема в том, что совпадение соответствует самому началу, а не одному фрагменту.

1 Ответ

1 голос
/ 06 апреля 2009

Как насчет:

\d+(?=\s*\<[^\>]+\>[^\<]*\bDecisions\b)
\d+(?=\s*<[^>]+>[^<]*\bDecisions\b)

Это выберет только 1 (и ничего больше)

Вторая форма для процессора регулярных выражений, который не должен экранировать < и >.

Выражение предпросмотра (?=...) гарантирует выбор числа \d+, за которым следует элемент (), содержащий текст (означающий отсутствие открытия '<': [^<]*), который включает слово Decisions.

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

\s\d(?=\s*\<[^\>]+class\s*=\s*'Txt9Gray'[^\>]*\>)
\s\d(?=\s*\<[^>]+class\s*=\s*'Txt9Gray'[^>]*>)

будет получать одну цифру (при условии, что она следует за пробелом), за которой следует элемент, содержащий атрибут 'class='Txt9Gra y' '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...