正規表現を使用して、特別なテキストを含む HTML テーブル行を見つけたいです。
上記の表の最初のセルテキスト「合計」で、最初の行を置き換えたいと思います。
<table>
<tr><td>Total</td><td>255</td></tr>
<tr><td>XYz</td><td>441</td></tr>
</table>
あなたの質問に答えるために、これは一致し、その行を置き換えることができます.
(<tr><td>Total.*?</tr>)
ただし、可能であれば、HTMLAgilityPack (不正な形式の HTML を適切に処理します) や、厳密な XHTML マークアップ (まれ) を使用できる幸運な場合は、単純な XML パーサーなどを使用することをお勧めします。
HTML 入力文字列が有効な HTML (整形式) であるか、そうでない場合、関数は失敗します:P
これを試して
private static MatchCollection GetSpecialTables(string inputStr, string ftrName)
{
try
{
return Regex.Matches(inputStr, string.Format(@"<table>\s+<tr><td>{0}</td>.+?</table>", Regex.Escape(ftrName)), RegexOptions.Singleline);
}
catch (ArgumentException ex)
{
// Syntax error in the regular expression, handle it
return null;
}
}
// use it this way!
static void Main()
{
var matches = GetSpecialTables(myHtml, "Total");
foreach (Match match in matches)
{
// match.Value;
}
}
残念ながら、HTML を正規表現だけで確実に照合することはできません。これは、HTML が正規表現を使用して解析可能な 通常の言語ではなく、文脈自由言語であるためです。
代わりに HTML パーサーの使用を検討してください。C# の場合、上記のコメントで mgnoonan が述べたように、 HTML Agility Packが適切な選択です。