RegEx匹配没有前缀标记的数字的方法?

时间:2009-04-06 05:07:02

标签: vb.net regex

     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 个答案:

答案 0 :(得分:1)

怎么样:

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

那只会选择1(而不是别的)

第二种形式适用于正则表达式处理器,无需转义<>

前瞻表达式(?=...)保证选择一个数字\d+,后跟一个包含文本的元素()(意思是没有开头“<”:[^<]*),包括决定一词。

前瞻技术可以与其他正则表达式结合使用:

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

会抓取一个数字(假设它跟在一个空格后面),然后是一个包含属性“class='Txt9Gra y”的元素