Board logo

标题: [问题求助] [已解决]Powershell关于正则表达式在第一次匹配到的结果里再次过滤 [打印本页]

作者: wxyz0001    时间: 2021-5-1 08:43     标题: [已解决]Powershell关于正则表达式在第一次匹配到的结果里再次过滤

本帖最后由 wxyz0001 于 2021-5-1 09:19 编辑

Powershell关于正则表达式在第一次匹配到的结果里再次过滤
▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃

第一次匹配的表达式:<td class="title">.*?html  的结果如下:
  1. <td class="title"><a target="_blank" href="../2020_06/duzh20200623.html
  2. <td class="title"><a target="_blank" href="../2020_05/duzh20200534.html
  3. <td class="title"><a target="_blank" href="../2020_04/duzh20200424.html
  4. <td class="title"><a title="微信症候群" href="../2016_07/duzh20160720.html
  5. <td class="title"><a title="念念不忘,必有回响" href="../2016_06/duzh20160620.html
  6. <td class="title"><a title="百尺宫墙少年心" href="../2016_05/duzh20160514.html
复制代码
在此<td class="title">.*?html 表达式里怎么再次过滤得到".."后的结果:
  1. /2020_06/duzh20200623.html
  2. /2020_05/duzh20200534.html
  3. /2020_04/duzh20200424.html
  4. /2016_07/duzh20160720.html
  5. /2016_06/duzh20160620.html
  6. /2016_05/duzh20160514.html
复制代码
要求用分组向后引用或内嵌等方式与第一次匹配合成一个表达式.
在第一次的结果另起一个表达式 (?<=\.\.).*?html 可以达到要求
但是式分了两次匹配
怎么把
  1. <td class="title">.*?html
复制代码
  1. (?<=\.\.).*?html
复制代码
合并到一个表达式里而达到要求呢
如果一开始就用(?<=\.\.).*?html就会匹配到很多不需要的行,所以需要用(?<=\.\.).*?html再次过滤
求高手指点
作者: went    时间: 2021-5-1 09:01

  1. $content = Get-Content 4.txt | Out-String
  2. [System.Text.RegularExpressions.Regex]::Matches($content,'(?<=\<td class="title".*?\.\.).*?html').Value
复制代码

作者: wxyz0001    时间: 2021-5-1 09:18

回复 2# went
正解,谢谢
作者: 523066680    时间: 2021-5-1 09:24

Perl
Mojo::DOM, CSS Selector
  1. my $dom = Mojo::DOM->new( $html );
  2. grep { s/..//; say $_; } ( $dom->find("td.title a")->map(attr=>"href")->each )
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2