我有一个递归的html文本,如:
string html = "<input id=\"txt0\" value=\"hello\"></input>some undefined text<input id=\"txt1\" value=\"world\"></input>";
可以重复n次(在例子中n = 2),但是n是一个未知的变量号。
我想使用正则表达式将'value'属性中的所有文本(在示例'hello'和'world'中)替换为数组中的文本。
Regex rg = new Regex(which pattern?, RegexOptions.IgnoreCase);
int count= rg.Split(html).Length - 1; // in the example count = 2
for (int i = 0; i < count; i++)
{
html= rg.Replace(html, @"value=""" + myarray[i] + @""">", 1);
}
我的问题是我无法找到正确的正则表达式来进行这些替换。
如果我使用类似的东西:
Regex rg = new Regex(@"value="".*""", RegexOptions.IgnoreCase);
int count= rg.Split(html).Length - 1;
for (int i = 0; i < count; i++)
{
html= rg.Replace(html, @"value=""" + myarray[i] + @"""", 1);
}
我得到像
这样的HTML<input id="txt0" value="lorem ipsum"></input>
因为。*中的。*包含额外的字符,而我需要它直到下一个
'<input'
occurence。
结果应该是这样的:
<input id="txt0" value="lorem ipsum"></input>some undefined text<input id="txt1" value="another text"></input>
非常感谢您的建议或帮助。 谢谢!
答案 0 :(得分:1)
不要像其他人在评论中指出的那样尝试用正则表达式解析html。
假设您的input
值 <input id=txt2 value="x">
。
<input id=txt1 value='<input id=txt2 value="x">' >
你能轻松解析它吗?
因此使用Html Parser。我将使用您的样本 Html Agility Pack
string html = "<input id=\"txt0\" value=\"hello\"></input>some undefined text<input id=\"txt1\" value=\"world\"></input>";
var myarray = new List<string>() { "val111", "val222", "val333" };
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
int count = 0;
foreach(var inp in doc.DocumentNode.Descendants("input"))
{
if (inp.Attributes["value"] != null)
inp.Attributes["value"].Value = myarray[count++];
}
答案 1 :(得分:0)
虽然我倾向于推动您使用HTML解析器, IF ,您的HTML输入就像在您的示例中一样简单,并且您没有像LB在他的HTML中那样的时髦HTML回答,问题的解决方案就是不要贪心:
Regex rg = new Regex(@"value="".*""?", RegexOptions.IgnoreCase);
问号告诉Regex停留在您模式的最短匹配位置。