REGEX 初学者查询 - 获取 HTML 值(跨多行并包含非文本字符时)

问题描述 投票:0回答:0

我正在尝试从 HTML 源中提取数据,以创建书籍和作者列表。

因为每本书都有自己的 HTML 页面,所以我使用正则表达式方法来获取我需要的信息。

使用以下代码示例,我可以在使用时成功调用 $regexp 返回书名(例如“我的第一本烹饪书”)

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

但是,我无法使用类似的方法检索作者,我假设这一定是由于代码分布在多行中,或者包含了非文本字符。

>> $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”)

我哪里错了?

我试过在 & 字符 ("&") 周围放置双引号,并将我的 (?.*) 放在代码的不同位置(这会得到不同的结果,但似乎只是在单行源代码时使用代码)。 [我假设我需要两行代码,以便我可以确定正则表达式中代码的“作者:”部分,以及第二行的所需结果]

[已解决]

感谢所有提出解决此问题的替代方法的人。然而,我终于可以说,我认为我已经解决了它,同时坚持使用 Powershell 正则表达式。

我将 $regex1 行替换为

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

然后使用以下行给我所需的作者姓名:

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

呸!

regex powershell web-scraping regex-group
© www.soinside.com 2019 - 2024. All rights reserved.