我有像
这样的html字符串<td AutoTab="true" Compulsory="true" ValidationGroup="OU20141008-0001" class="bn_TextBox bn_TextBox_com i" class="r">
<span id="FixedGrid1__txtSUPPLY_AMT_0_Container">
<input AutoTab="true" Compulsory="true" ValidationGroup="OU20141008-0001" class="bn_TextBox bn_TextBox_com r ime-disabled" name="FixedGrid1$ctl11$_txtSUPPLY_AMT" type="text" value="900000" readonly="readonly" id="FixedGrid1__txtSUPPLY_AMT_0" style="color:0;background-color:0;width:96%;" />
</span>
</td><td class="r">
<span id="FixedGrid1__txtM_AMT_0_Container"><input AutoTab="true" class="bn_TextBox r ime-disabled" name="FixedGrid1$ctl11$_txtM_AMT" type="text" value="818181" readonly="readonly" id="FixedGrid1__txtM_AMT_0" style="color:0;background-color:0;width:96%;" /></span>
</td><td class="r">
<span id="FixedGrid1__txtTAX_AMT_0_Container"><input AutoTab="true" Compulsory="true" ValidationGroup="OU20141008-0001" class="bn_TextBox bn_TextBox_com r ime-disabled" name="FixedGrid1$ctl11$_txtTAX_AMT" type="text" value="81818" readonly="readonly" id="FixedGrid1__txtTAX_AMT_0" style="color:0;background-color:0;width:96%;" /></span>
</td><td class="c">2014-10-08</td><td>1111</td><td class="c">
<span id="FixedGrid1_Label5_0_Container"><span id="FixedGrid1_Label5_0" class="bn_Label">2014-10-08</span></span>
</td><td class="c">
<span id="FixedGrid1_Label6_0_Container"><span id="FixedGrid1_Label6_0" class="bn_Label">2014-10-08</span></span>
</td>
我需要将此input type = text html标记替换为其值的纯文本。
喜欢
<input AutoTab="true" Compulsory="true" ValidationGroup="OU20141008-0001" class="bn_TextBox bn_TextBox_com r ime-disabled" name="FixedGrid1$ctl11$_txtSUPPLY_AMT" type="text" value="900000" readonly="readonly" id="FixedGrid1__txtSUPPLY_AMT_0" style="color:0;background-color:0;width:96%;" />
这只剩下900000
我知道有HTML Agility包,它简单快捷。
但在这种情况下,我不能使用任何第三方库。
有人能帮忙吗?
答案 0 :(得分:1)
您需要匹配整个输入,名称最好,因为这应该是唯一标记,但捕获值属性以用于替换。如果您使用ExplicitCapture,这会更简单一些,因此您可以在替换中使用捕获的名称 - 请参阅Substituting a Named Group on MSDN
总结正则表达式:
\<input
- 匹配代码的开头.*?
- 匹配可能的最小字符以获取下一位(名称属性)name=""FixedGrid1\$ctl11\$_txtSUPPLY_AMT""
- 匹配名称标签.*?
- 匹配可能的最小字符以获得下一位(值属性)value=""(?<val>[^""]*)""
- 匹配value属性并在val
.*?
- 匹配可能的最小字符到达下一位(标记的末尾)\>
- 匹配标记的结尾 Regex.Replace(input, @"\<input.*?name=""FixedGrid1\$ctl11\$_txtSUPPLY_AMT"".*?value=""(?<val>[^""]*)"".*?\>", "${val}", RegexOptions.ExplicitCapture);
答案 1 :(得分:0)
以下正则表达式应该这样做(至少对于给定的示例):
<input.+(type="text"|value="(?<Val>[^"]+)").*/>
背后的逻辑如下:
input
代码type=text
和value=<something>
,无论它们出现的顺序如何value
Val
属性中的字符串
input
代码的其余部分。现在,要替换只使用以下代码段:
string value = @"${Val}";
return myRegex.Replace(targetString, value);