意外的Regex结果

本文关键字:结果 Regex 意外 | 更新日期: 2023-09-27 18:01:15

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

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开始的巨大数字,然后将所有其他数字组合在一起。

我对regex很不熟悉,但类似的解决方案在其他地方也适用。我是忽略了一些简单的东西,还是有更好的方法?

意外的Regex结果

.*是贪婪的,将匹配所有字符,因此匹配将是一个巨大的多行匹配。您需要将数字描述为"数字、逗号、数字",而不是"0到数百万个任意字符">

所以不是

.*

使用

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

或者什么的。

或者使用某种负面前瞻来确保您不会意外地匹配<。此外,如果源材料是有效的xml或html,请使用xml或html解析器对其进行解析。