You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则入门问题:跨多行含非文本字符时提取HTML内容

问题:从HTML源码中提取书籍作者信息失败

背景

我需要从独立的书籍HTML页面中提取数据,生成书籍和作者列表,目前用正则方法提取书籍标题成功,但提取作者信息时遇到了问题。

成功提取书籍标题的实现

使用以下PowerShell代码可以成功获取书籍标题(示例返回结果为My First Cook Book):

>> $regexp = '<title>listing for - (?<title>.*) \[.*\]'
>> $name = ($url | select-string $regexp -allmatches).matches
>> $name.groups[1].value
My First Cook Book

提取作者信息的失败尝试

我推测失败原因是目标HTML代码跨多行或包含特殊字符,尝试的代码及报错如下:

>> $regex1 = '<td class="tboldc" width="170">&nbsp; Author:</td>
>> <td class="tnormg" width="*">&nbsp;(?<author>.*)</td>'

>> $name1 = ($url | select-string $regex1 -allmatches).matches
>> $name.groups[1].value
Cannot index into a null array.
At line:1 char:1
+ $name1.groups[1].value     

我需要提取的作者姓名为D Atherton,尝试过给&添加双引号、调整捕获组的位置,但只有当源码是单行时能得到不同结果,我认为需要匹配两行代码来定位Author:部分,并从第二行提取所需的作者信息。

最终解决方法

我最终坚持使用PowerShell正则解决了问题,具体步骤如下:

替换正则表达式

将原来的$regex1替换为:

$regex1 = '(?s) Author:<\/td>(?<author>.*?)<\/td' 

提取并清洗作者姓名

使用以下代码处理匹配结果,得到最终的作者姓名:

$author = $name1.groups[1].value -creplace '^[^\;]*\;', '' 

内容的提问来源于stack exchange,提问作者CJ Perry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:05:32