gpt4 book ai didi

c# - 如何循环从字符串中删除文本?

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:29 25 4
gpt4 key购买 nike

我想从网站上提取定价信息。为此,我使用正则表达式查找第一个“$”所在的所有实例。从那里我使用 substring 来获取接下来的 7 个字符,例如42,945 美元。我删除了“$”之前的所有文本,并通过 For 循环针对我正在使用的网站上的不同 $ 金额重复该过程多次。

我遇到的问题是在我修剪字符串然后转到下一个 $ 后,重新创建了原始字符串。

这是我使用的代码:

WebClient client = new WebClient();
string allcontent = client.DownloadString("example.com");

string body = allcontent.Substring(140480,200000);

Regex rx = new Regex("[$]");

var numberCount = rx.Matches(body).Count;

string price = String.Empty;
string price2 = String.Empty;
int match = Int32.MaxValue;
string trimmed = String.Empty;

List<string> priceList = new List<string>();

for (int i = 0; i < numberCount; i++)
{

trimmed = body;

match = rx.Match(trimmed).Index;

price = trimmed.Substring(match, 7);

priceList.Add(price);

trimmed = trimmed.Remove(0, match + 7);

}

Console.WriteLine(priceList[0]);
Console.WriteLine(priceList[1]);

Console.ReadKey();

假设字符串是:ABC $300 DEF $600 GHI $120 JKF $980

在第一次循环迭代后,我应该得到 $300,在第二个 $600 上,依此类推。相反,我每次都得到 300 美元

如何解决这个问题以获得正确的值?

最佳答案

现有代码从字符串的开头开始删除,而不是从匹配的位置开始。但是我们可以将其简化为更多地依赖 RegEx 匹配提供的数据:

var priceList = new List<string>();
var rx = new Regex("[$]([0-9]{1,2},)?[0-9]{3}");

using (var client = new WebClient())
{
string body = client.DownloadString("example.com").Substring(140480,200000);
var matches = rx.Matches(body);

foreach (var match in matches)
{
priceList.Add(match);
}
}

Console.WriteLine(priceList[0]);
Console.WriteLine(priceList[1]);

Console.ReadKey(true);

修改后的表达式将匹配整个价格值。你可以在这里看到它的工作:

https://dotnetfiddle.net/1DltMh

但即使是这段代码看起来也很脆弱。使用正则表达式解析HTML是generally frowned upon .您正在抓取的网站格式的任何小改动都可能严重破坏这一点。查看 real HTML parser. 可能会做得更好

关于c# - 如何循环从字符串中删除文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56760286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com