Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 请帮助修改此正则表达式_C#_.net_Regex - Fatal编程技术网

C# 请帮助修改此正则表达式

C# 请帮助修改此正则表达式,c#,.net,regex,C#,.net,Regex,可能重复: 我正在尝试搜索以下HTML字符串以获取这些产品的成本: <div id=menu> <p>A hamburger without cheese costs $5.</p> <p>A cheeseburger with one patty costs $6.</p> </div> 一个没有奶酪的汉堡包要5美元 一个芝士汉堡加一个馅饼要6美元 我能够使用以下表达式成功获得每种商品的价格: string

可能重复:

我正在尝试搜索以下HTML字符串以获取这些产品的成本:

<div id=menu>
  <p>A hamburger without cheese costs $5.</p>
  <p>A cheeseburger with one patty costs $6.</p>
</div>

一个没有奶酪的汉堡包要5美元

一个芝士汉堡加一个馅饼要6美元

我能够使用以下表达式成功获得每种商品的价格:

string hamburger = "<p>A hamburger[^\\$]+\\$(?<price>.*?).</p>";
string cheeseburger = "<p>A cheeseburger[^\\$]+\\$(?<price>.*?).</p>"

    public string GetProductPrice(string expression)
    {
        expression = Regex.Unescape(expression);
        Regex regex = new Regex(expression);
        MatchCollection mc = regex.Matches(MENU_DIV_STRING);

        if (mc.Count > 0 && mc[0].Groups.Count == 2)
            return mc[0].Groups[1].ToString();
        else
            return "--";
    }
string hamburger=“A hamburger[^\\\$]+\\$(?*?)。

”; string cheeseburger=“A cheeseburger[^\\\$]+\\\$(?*?)。

” 公共字符串GetProductPrice(字符串表达式) { expression=Regex.Unescape(表达式); 正则表达式正则表达式=新正则表达式(表达式); MatchCollection mc=regex.Matches(菜单分区字符串); 如果(mc.Count>0&&mc[0].Groups.Count==2) 返回mc[0]。组[1]。ToString(); 其他的 返回“-”; }
但是,当给出以下内容时,我被抛出了一个循环:

<div id=menu>
  <p>A hamburger without cheese costs $5.</p>
  <p>A cheeseburger with one patty costs $6.</p>
  <p>A cheeseburger (SPECIAL: add an additional patty for $1 each) costs $6.</p>
</div>

一个没有奶酪的汉堡包要5美元

一个芝士汉堡加一个馅饼要6美元

一个芝士汉堡(特价:加一块肉饼,每块1美元)售价6美元

第二个美元符号“为1美元再添一块肉饼”的出现让我大吃一惊。我已经研究并尝试了很多事情,比如使用模式,现在我完全弄糊涂了


是否有一个正则表达式可以计算出一个奶酪汉堡的价格,无论是否有特殊的奶酪汉堡?

否..否..否..

正则表达式不是解析HTML文件的好选择

HTML不严格,格式也不规则

使用

正则表达式用于正则表达式而不是不正则表达式

您可以使用此代码像这样检索它

HtmlDocument doc = new HtmlDocument();
doc.Load(yourStream);

var itemList = doc.DocumentNode.SelectSingleNode("//div[@id='menu']")
                  .Elements("p")
                  .Select(p => p.InnerText)
                  .ToList();

foreach(var item in itemList)
{
Match m= Regex.Match(item,@"(?<name>[Aa]?\s*.*?)\s.*?(?<price>\$\d+).*");
    if(m.Success==true)
     {
            m.Groups["name"].Value;
            m.Groups["price"].Value;
     }
}
HtmlDocument doc=新的HtmlDocument();
文档加载(yourStream);
var itemList=doc.DocumentNode.SelectSingleNode(//div[@id='menu'])
.要素(“p”)
.Select(p=>p.InnerText)
.ToList();
foreach(itemList中的变量项)
{
Match m=Regex.Match(项,@“(?[Aa]?\s**?)\s.*(?\$\d+).*);
如果(m.Success==true)
{
m、 组[“名称”]。值;
m、 组[“价格”]。价值;
}
}
正则表达式将是

(?[Aa]?\s**?)\s.*(?\$\d+).*

Group1捕获名称


第2组捕获价格

正则表达式不是解析HTML文件的好选择

HTML不严格,格式也不规则

使用

正则表达式用于正则表达式而不是不正则表达式

您可以使用此代码像这样检索它

HtmlDocument doc = new HtmlDocument();
doc.Load(yourStream);

var itemList = doc.DocumentNode.SelectSingleNode("//div[@id='menu']")
                  .Elements("p")
                  .Select(p => p.InnerText)
                  .ToList();

foreach(var item in itemList)
{
Match m= Regex.Match(item,@"(?<name>[Aa]?\s*.*?)\s.*?(?<price>\$\d+).*");
    if(m.Success==true)
     {
            m.Groups["name"].Value;
            m.Groups["price"].Value;
     }
}
HtmlDocument doc=新的HtmlDocument();
文档加载(yourStream);
var itemList=doc.DocumentNode.SelectSingleNode(//div[@id='menu'])
.要素(“p”)
.Select(p=>p.InnerText)
.ToList();
foreach(itemList中的变量项)
{
Match m=Regex.Match(项,@“(?[Aa]?\s**?)\s.*(?\$\d+).*);
如果(m.Success==true)
{
m、 组[“名称”]。值;
m、 组[“价格”]。价值;
}
}
正则表达式将是

(?[Aa]?\s**?)\s.*(?\$\d+).*

Group1捕获名称


Group2捕获价格

用正则表达式解析html很麻烦。使用下面回答的HTMLAgilityPack-迄今为止最简单的解决方案我编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。用正则表达式解析html是很麻烦的。按照下面的回答使用HTMLAgilityPack-到目前为止,这是最简单的解决方案我编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。好的,使用正则表达式解析html不是一件好事。但是你如何解析一个奶酪汉堡(特价:每一个加一块1美元的肉饼)的价格是6美元。用HtmlAgilityPack来获得价格?+1“不规则表达”哈哈哈!好的,谢谢。我确实查看了codeplex上的HTMLAgilityPack(应该提到)站点,但没有看到任何解析html标记内部文本的示例。这个例子很有帮助。谢谢@Anirudha唯一的问题是您的linq代码无法编译。@Anirudha为什么不试试?你希望我修复它吗?好的,使用正则表达式解析html不是一件好事。但是你如何解析一个奶酪汉堡(特价:每一个加一块1美元的肉饼)的价格是6美元。用HtmlAgilityPack来获得价格?+1“不规则表达”哈哈哈!好的,谢谢。我确实查看了codeplex上的HTMLAgilityPack(应该提到)站点,但没有看到任何解析html标记内部文本的示例。这个例子很有帮助。谢谢@Anirudha唯一的问题是您的linq代码无法编译。@Anirudha为什么不试试?你希望我把它修好吗?