意外的正则表达式结果

时间:2013-02-26 09:24:01

标签: c# regex

我正在尝试提取与用户名相关联的数字。每个用户名旁边都有一个特定的值。

private void queryUsers()         {

        string browserText = webBrowser1.DocumentText;
        Match match = Regex.Match(browserText, "(>pickles</a></td><td>).*(</td><td align=\"center\">)");

        string id = match.ToString();
        string clean_id = Regex.Replace(id, @"\D", "");
        textBox1.AppendText(clean_id);

    }

我正在搜索的文件格式如下......

<tr><td>17.</td><td>ab</td><td><a href="http://www.*****.com/s.php?id=500000">pickles</a></td><td>150,000</td><td align="center"></td></tr>

<tr><td>18.</td><td>cd</td><td><a href="http://www.*****.com/s.php?id=7245658">donuts</a></td><td>250</td><td align="center"></td></tr>

我期待结果为“150000”。然而事实并非如此,它从150000开始创造了一个巨大的数字,然后结合了所有其他数字。

我对正则表达式很不熟悉,但类似的解决方案对我来说也适用于其他领域。我忽略了一些简单的事情,还是有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

。*是贪婪的并且将匹配所有角色,因此匹配将是一个巨大的多线匹配。你需要将数字描述为“数字,逗号,数字”而不是“0到数百万的任何字符”

所以而不是

.*

使用

([0-9]+,)?[0-9]+

或者其他什么。

或使用某种负向前瞻来确保你不会意外地匹配&lt;。此外,如果源材料是有效的xml或html,请使用xml或html解析器来解析它。