如何去除input/select等标签只保留对应value

hk207 2017-05-13 12:24:43
C#在做一个抓包测试时,网页内容包含了input和select,如何取到对应的value?举例如下:
抓取到的str=

<table>
<tr>
<td>用户名</td>
<td><input name="userName" value="张三" class="red" /></td>
<td>学历</td>
<td><select name="xl">
<option value ="gaoz">高中</option>
<option value ="daz">大专</option>
<option value ="benk" selected="selected">本科</option>
</select></td>
</tr>
<table>

想要的结果str=

<table>
<tr>
<td>用户名</td>
<td>张三</td>
<td>学历</td>
<td>本科</td>
</tr>
<table>

想到可以用正则匹配,但是只会一点点正则,不知道怎么做。

请大神帮忙,万分感谢。
...全文
432 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hk207 2017-06-05
  • 打赏
  • 举报
回复
大神呢?
xuzuning 2017-05-25
  • 打赏
  • 举报
回复
怎么可能,难道你的机器有问题?
            str = "学历: <SELECT disabled class=text name=xL><OPTION selected value=01>小学</OPTION> <OPTION value=02>初中</OPTION> <OPTION value=03>高中</OPTION> <OPTION value=04>本科</OPTION> <OPTION value=05>研究生</OPTION> <OPTION value=06>博士</OPTION> <OPTION value=07>博士后</OPTION> <OPTION value=08>其它</OPTION></SELECT> ";

var r = Regex.Replace(r, "(?si)<select.+selected.*?>([^<]+).+?/select>", "$1");
Console.WriteLine(r);
hk207 2017-05-25
  • 打赏
  • 举报
回复
引用 8 楼 xuzuning 的回复:
因为你没有忽略大下写 (?si)<select.+selected.*?>([^<]+).+?/select>
我试过(?i)、(?s)、(?is),还是不行啊。
hk207 2017-05-25
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
怎么可能,难道你的机器有问题?
            str = "学历: <SELECT disabled class=text name=xL><OPTION selected value=01>小学</OPTION> <OPTION value=02>初中</OPTION> <OPTION value=03>高中</OPTION> <OPTION value=04>本科</OPTION> <OPTION value=05>研究生</OPTION> <OPTION value=06>博士</OPTION> <OPTION value=07>博士后</OPTION> <OPTION value=08>其它</OPTION></SELECT> ";

            var r = Regex.Replace(r, "(?si)<select.+selected.*?>([^<]+).+?/select>", "$1");
            Console.WriteLine(r);
我仔细看了,可能是因为有的input没有value属性,有的select没有selected,这个咋整? 能不能匹配成没有value属性的input为空,没有selected属性的select为空?
正怒月神 2017-05-24
  • 打赏
  • 举报
回复
可以用正则。可惜我不在行,只能给你一个意见
xuzuning 2017-05-24
  • 打赏
  • 举报
回复
因为你没有忽略大下写 (?si)<select.+selected.*?>([^<]+).+?/select>
hk207 2017-05-24
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
        static void Main(string[] args)
        {
            var str = @"<table>
<tr>
<td>用户名</td>
<td><input name=""userName"" value=""张三""  class=""red"" /></td>
<td>学历</td>
<td><select name=""xl"">
<option value =""gaoz"">高中</option>
<option value =""daz"">大专</option>
<option value =""benk""  selected=""selected"">本科</option>
</select></td>
</tr>
<table>";
            var r = Regex.Replace(str, "<input.+value=\"([^\"]+).+?>", "$1");
            r = Regex.Replace(r, "(?s)<select.+selected.*?>([^<]+).+?/select>", "$1");
            Console.WriteLine(r);
        }
为什么这样的select取不到数据呢?????
学历: <SELECT disabled class=text name=xL><OPTION selected value=01>小学</OPTION> <OPTION value=02>初中</OPTION> <OPTION value=03>高中</OPTION> <OPTION value=04>本科</OPTION> <OPTION value=05>研究生</OPTION> <OPTION value=06>博士</OPTION> <OPTION value=07>博士后</OPTION> <OPTION value=08>其它</OPTION></SELECT> 
hk207 2017-05-15
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
比如说 <select name="xl">,万一人家某个片段输出了 <select name="xl"> 或者 <SELECT name="xl"> 或者 <select class="xxx" anc-nx="func1('select')" name="xl"> 之类的呢? 能按照识别语法的方式来设计程序,才能解析。简单匹配单词儿通常只是假设对方不会以 html 语义为基础,而是对对方根本不动态设计 html 输出。
不知道除了正则之外,还有什么好办法可以得到想要的结果?
xuzuning 2017-05-15
  • 打赏
  • 举报
回复
        static void Main(string[] args)
{
var str = @"<table>
<tr>
<td>用户名</td>
<td><input name=""userName"" value=""张三"" class=""red"" /></td>
<td>学历</td>
<td><select name=""xl"">
<option value =""gaoz"">高中</option>
<option value =""daz"">大专</option>
<option value =""benk"" selected=""selected"">本科</option>
</select></td>
</tr>
<table>";
var r = Regex.Replace(str, "<input.+value=\"([^\"]+).+?>", "$1");
r = Regex.Replace(r, "(?s)<select.+selected.*?>([^<]+).+?/select>", "$1");
Console.WriteLine(r);
}
  • 打赏
  • 举报
回复
比如说 <select name="xl">,万一人家某个片段输出了 <select name="xl"> 或者 <SELECT name="xl"> 或者 <select class="xxx" anc-nx="func1('select')" name="xl"> 之类的呢? 能按照识别语法的方式来设计程序,才能解析。简单匹配单词儿通常只是假设对方不会以 html 语义为基础,而是对对方根本不动态设计 html 输出。
crystal_lz 2017-05-14
  • 打赏
  • 举报
回复
strnew = regex.Replace( regex.Replace(strold,@"<option.*?>(.*?)</option>","$1"), //替换掉option标签 @"<input.*?value=""(.*?)"".*?>","$1" //替换掉input ).Replace(@"<td><select name=""xl"">","") //替换两个没用到标签 .Replace("</select></td>") .Replace("\r\n\r\n","\r\n"); //由于上面替换了两处没用到地方 所以会有多余行 替换 所以说 要是决定这样有意思 就去倒腾吧
  • 打赏
  • 举报
回复
解析一个 html,可以用许多方式,根据你的环境而定。例如 XPath、Linq for XML、jQuery 的选择器、你的 html 解析器产生的层级数据结构。总之都是根据语法解析,而不是简单地匹配什么单词儿。
xuggzu 2017-05-13
  • 打赏
  • 举报
回复
用正则就查表达式写法。 不用正则,用xml读取节点也一样,在td节点搜select子节点,然后取option子节点的属性(attribute)selected值,如果该值=selected,取节点值为父节点td值即可。

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧