0

这将是示例文本:

<option value="USD">American Samoa, United States Dollar (USD)</option>
<option value="EUR">Andorra, Euro (EUR)</option>
<option value="AOA">Angola, Kwanza (AOA)</option>
<option value="XCD">Anguilla, East Caribbean Dollar (XCD)</option>
<option value="XCD">Antigua and Barbuda, East Caribbean Dollar (XCD)</option>
<option value="ARS">Argentina, Peso (ARS)</option>

这是我的尝试:

<option selected="selected" value="[A-Z]{3}">(?<Test>).+</option>.

问题是,它只匹配它找到的第一个匹配项。虽然我希望它得到所有。我在尝试中缺少什么?

4

2 回答 2

2

不建议将 Regex 用于 HTML 解析。

为什么不使用 HTML Agility Pack?

http://htmlagilitypack.codeplex.com/

这是一个例子:

 HtmlDocument doc = new HtmlDocument();
 doc.LoadHtml("YOUR HTML STRING");
 foreach(HtmlNode node in doc.DocumentElement.SelectNodes("//select/option[@selected='selected']")
 {
    string text = node.InnerHtml;                  // "American Samoa, United States Dollar (USD)"
    string value = node.Attributes["value"].Value; // "USD"
 }

您也可以通过 NuGet 下载 =)

如果您喜欢这个解决方案,您可以阅读更多关于 XPath 的信息:

http://www.w3schools.com/XPath/xpath_syntax.asp

如果您仍想使用 Regex,可以查看此站点:

http://www.jslab.dk/tools.regex.php

于 2014-05-24T23:21:28.657 回答
1

你在谈论像这样的正则表达式:

<option value=""[A-Z]{3}""[^<]*</option>

这是一个完整的 C# 程序,请参阅现场 C# 演示底部的输出。

using System;
using System.Text.RegularExpressions;
using System.Collections.Specialized;
class Program {
static void Main()    {
string s1 = @"<option value=""USD"">American Samoa, United States Dollar (USD)</option>
<option value=""EUR"">Andorra, Euro (EUR)</option>
<option value=""AOA"">Angola, Kwanza (AOA)</option>
<option value=""XCD"">Anguilla, East Caribbean Dollar (XCD)</option>
<option value=""XCD"">Antigua and Barbuda, East Caribbean Dollar (XCD)</option>
<option value=""ARS"">Argentina, Peso (ARS)</option>";
var myRegex = new Regex(@"<option value=""[A-Z]{3}""[^<]*</option>");
MatchCollection AllMatches = myRegex.Matches(s1);

Console.WriteLine("\n" + "*** Matches ***");
if (AllMatches.Count > 0)    {
    foreach (Match SomeMatch in AllMatches)    {
        Console.WriteLine("Overall Match: " + SomeMatch.Value);
            }
}

Console.WriteLine("\nPress Any Key to Exit.");
Console.ReadKey();
} // END Main
} // END Program
于 2014-05-24T23:24:07.437 回答