我正在尝试从 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"> Author:</td>
>> <td class="tnormg" width="*"> (?<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 '^[^\;]*\;', ''
呸!