意外的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很不熟悉,但类似的解决方案在其他地方也适用。我是忽略了一些简单的东西,还是有更好的方法?
.*是贪婪的,将匹配所有字符,因此匹配将是一个巨大的多行匹配。您需要将数字描述为"数字、逗号、数字",而不是"0到数百万个任意字符">
所以不是
.*
使用
([0-9]+,)?[0-9]+
或者什么的。
或者使用某种负面前瞻来确保您不会意外地匹配<。此外,如果源材料是有效的xml或html,请使用xml或html解析器对其进行解析。