求一个正则表达式,谢谢了!

howze 2018-11-21 03:36:08
<tr>
<td class="td_t">
<p><a class="docname" href="/doc/info;jsessionid=F770B0A7EF98F5DFB4B32B0874C1CE0D.b?hosId=957107&deptId=9275&docId=18840&docName=%e7%a8%8b%e8%93%93">[程蓓]</a></p>
<p>职务:经理</p>
</td>

<td data-1="" data-type="per"> </td>
<td data-2="" data-type="per"> </td>
<td data-3="" data-type="per"> </td>

<td data-idx="4" data-type="per">
<form action="/order/num" method="get" name="orderInfo">
<input type="hidden" name="hisSchemeId" value="ws-957107-278822">
<input type="hidden" name="schemeId" value="">
<input type="hidden" name="orderDate" value="20181122">
<input type="hidden" name="hosId" value="957107">
<input type="hidden" name="hosName" value="贸易公司">
<input type="hidden" name="deptId" value="9275">
<input type="hidden" name="deptName" value="金牌销售">
<input type="hidden" name="docTitle" value="高级经理">
<input type="hidden" name="docId" value="18840">
<input type="hidden" name="docName" value="高飞">
<input type="hidden" name="regFee" value="150">
<input type="hidden" name="takeNumAddr" value="">
<span class="ym">已完成</span>
</form>
</td>

<td data-5="" data-type="per"> </td>
<td data-6="" data-type="per"> </td>
<td data-7="" data-type="per"> </td>
<td data-8="" data-type="per"> </td>
<td data-9="" data-type="per"> </td>
<td data-10="" data-type="per"> </td>
<td data-11="" data-type="per"> </td>
<td data-12="" data-type="per"> </td>

<td data-idx="13" data-type="per">
<form action="/order/num" method="get" name="orderInfo">
<input type="hidden" name="hisSchemeId" value="ws-957107-279444">
<input type="hidden" name="schemeId" value="">
<input type="hidden" name="orderDate" value="20181127">
<input type="hidden" name="hosId" value="957107">
<input type="hidden" name="hosName" value="贸易公司">
<input type="hidden" name="deptId" value="9275">
<input type="hidden" name="deptName" value="金牌销售">
<input type="hidden" name="docTitle" value="高级经理">
<input type="hidden" name="docId" value="18840">
<input type="hidden" name="docName" value="张峰">
<input type="hidden" name="regFee" value="150">
<input type="hidden" name="takeNumAddr" value="">
<input type="hidden" name="resTimeSign" value="0">
<input type="submit" class="btnyy" value=" 预约 10" title="总25人次,剩余10人次" alt="总25人次,剩余10人次">
</form>
</td>

<td data-14="" data-type="per"> </td>
<td data-15="" data-type="per"> </td>
<td data-16="" data-type="per"> </td>
</tr>


网页取出的代码是这个样子的
现在我想通过正则取出<td data-idx="X" data-type="per">中的data-idx以及值,还有对应下面form中的各项name和value,但是在form中,有的时候会有个<span>里面显示已完成,有时候又显示的是input,显示可预约的人数和信息,这个我都想取,正则研究了半天都不成功,哪位大神帮帮忙,感谢!

希望能做成二维数组


info = array(
0 => array(
'data-idx' => 4,
'hisSchemeId' => 'ws-957107-278822',
'schemeId' => '',
'orderDate' => '20181122', ,
'hosId' => '957107',
'hosName' => '贸易公司',
'deptId' => '9275',
'deptName' => '金牌销售',
'docTitle' => '高级经理',
'docId' => '18840',
'docName' => '高飞',
'regFee' => '150',
'takeNumAddr' => '',
这里还有个span标签的“已满”不知道怎么处理
),
1 => array(
'data-idx' => 13,
'hisSchemeId' => 'ws-957107-279444',
'schemeId' => '',
'orderDate' => '20181127', ,
'hosId' => '957107',
'hosName' => '贸易公司',
'deptId' => '9275',
'deptName' => '金牌销售',
'docTitle' => '高级经理',
'docId' => '18840',
'docName' => '张峰',
'regFee' => '150',
'takeNumAddr' => '',
'resTimeSign' => '0'(这个是多出来的,有的form里有,有的form里没有),
这里还有个input,显示value=" 预约 10" title="总25人次,剩余10人次",不知道怎么处理
),
......
...全文
196 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
howze 2018-11-22
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
你都知道用 Html Agility Pack 了 你永远都不可能把人的丰富想象,套在一个简单的模式之中 如果真的有一个不是太简单的方程能模拟人类的思维的话,我想你我也只能去街边乞讨了
我最终还是用Html Agility Pack实现了,比正则简单一些吧,谢谢大神了,结贴送分
howze 2018-11-22
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
你都知道用 Html Agility Pack 了 你永远都不可能把人的丰富想象,套在一个简单的模式之中 如果真的有一个不是太简单的方程能模拟人类的思维的话,我想你我也只能去街边乞讨了
感谢大神,我也再研究研究。
xuzuning 2018-11-21
  • 打赏
  • 举报
回复
你都知道用 Html Agility Pack 了
你永远都不可能把人的丰富想象,套在一个简单的模式之中
如果真的有一个不是太简单的方程能模拟人类的思维的话,我想你我也只能去街边乞讨了
howze 2018-11-21
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
为清晰起见,把你的数据放到文件里去了
            var s = File.ReadAllText("html.txt", Encoding.Default);
            //Console.WriteLine(s);
            foreach (Match m in Regex.Matches(s, "(data-idx)=\"([0-9]+)\".+?(<form.+?</form>)", RegexOptions.Singleline))
            {
                Console.WriteLine("{0} => {1}", m.Groups[1], m.Groups[2]);
                foreach (Match m1 in Regex.Matches(m.Groups[3].ToString(), "name=\"([^\"]+).*?value=\"([^\"]+)"))
                    Console.WriteLine("{0} => {1}", m1.Groups[1], m1.Groups[2]);
            }
由于是嵌套的匹配,你可以很容易的将他们按组分开
非常感谢大神,实际中可以解决问题,但是我想问一下,有没有可能一个正则表达式实现呢?如果不嵌套的话
xuzuning 2018-11-21
  • 打赏
  • 举报
回复
为清晰起见,把你的数据放到文件里去了
            var s = File.ReadAllText("html.txt", Encoding.Default);
//Console.WriteLine(s);
foreach (Match m in Regex.Matches(s, "(data-idx)=\"([0-9]+)\".+?(<form.+?</form>)", RegexOptions.Singleline))
{
Console.WriteLine("{0} => {1}", m.Groups[1], m.Groups[2]);
foreach (Match m1 in Regex.Matches(m.Groups[3].ToString(), "name=\"([^\"]+).*?value=\"([^\"]+)"))
Console.WriteLine("{0} => {1}", m1.Groups[1], m1.Groups[2]);
}

由于是嵌套的匹配,你可以很容易的将他们按组分开
howze 2018-11-21
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
你打算用 C# 实现吗?怎么贴出的是 php 格式?
二维数组只是举个例子为了说明目标,代码肯定是用C#写的,但是关键是正则不知道怎么取
howze 2018-11-21
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
为什么要用正则 用Html Agility Pack之类的库解析这个html的结构最好
我前面就是用的Html Agility Pack解析了到这一步,但是再向下就太麻烦了,而且Html Agility Pack对form支持不太好,我总是搞不成 如果大神有Html Agility Pack方法取也行的
xuzuning 2018-11-21
  • 打赏
  • 举报
回复
你打算用 C# 实现吗?怎么贴出的是 php 格式?
stherix 2018-11-21
  • 打赏
  • 举报
回复
为什么要用正则 用Html Agility Pack之类的库解析这个html的结构最好

110,538

社区成员

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

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

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