powershell - 如何在文本中获取指定的字符串
问题描述
我想从文本中获取一个字符串(它是一个 HTML 文本)。
如何从下面的文本中获取电子邮件地址(n.surname@examplemail.com)和正文(您的邮件已发送给以下收件人:)?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p><b><font color="#000066" size="3" face="Arial">Your message has been delivered to the following recipients:</font></b></p>
<font color="#000000" size="2" face="Tahoma">
<p><a href="mailto:n.surname@examplemail.com">Name Surname(n.surname@examplemail.com)</a></p>
<p>Subject: test</p>
</font>
</body>
</html>
解决方案
假设您的 HTML 是有效的(您粘贴的示例并非如此,如果它正是您从应用程序中获得的内容,您将不得不以某种方式更正它)。
处理更正的示例(添加<html>
标签,<meta>
根据此答案更正):
[xml]$html = @"
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<p><b><font color="#000066" size="3" face="Arial">Your message has been delivered to the following recipients:</font></b></p>
<font color="#000000" size="2" face="Tahoma">
<p><a href="mailto:n.surname@examplemail.com">Name Surname(n.surname@examplemail.com)</a></p>
<p>Subject: test</p>
</font>
</body>
</html>
"@
注意:通常更喜欢像在 XML 上一样处理文本,而不是字符串,因为您可以直接访问对象,这就是我[xml]
在开始时使用转换它的原因。
如果您的文件结构在所有情况下都完全相同,您可以像这样访问您提到的属性:
$body = $html.html.body.p.b.font.'#text'
$address = $html.html.body.font.p.a.href.replace('mailto:','')
或者,使用Select-Xml
:
$body = (Select-Xml -Xml $html -XPath '//font' | Where-Object {$_.Node.'#text'}).Node.'#text'
$address = (Select-Xml -Xml $html -XPath '//a').Node.href.replace('mailto:','')
您还可以使用以下脚本将文件结构更正为有效的 HTML:
$toBeCorrected = @"
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p><b><font color="#000066" size="3" face="Arial">Your message has been delivered to the following recipients:</font></b></p>
<font color="#000000" size="2" face="Tahoma">
<p><a href="mailto:n.surname@examplemail.com">Name Surname(n.surname@examplemail.com)</a></p>
<p>Subject: test</p>
</font>
</body>
</html>
"@
[xml]$correctHTML = '<html>' + ($toBeCorrected -replace '<meta (.*)>','<meta $1 />')
推荐阅读
- android - 如何将内容从文本文件复制到android中的数据库
- java - android条件语句检查char是否为单引号
- excel - 在一行中特定数量的单元格有内容后,如何取消编辑权限?
- sql - 在某些日期字符串上迭代 SQL 查询
- javascript - 提交 package-lock.json 值得麻烦吗?
- sql-server - 将参数从一个存储过程传递到另一个存储过程
- ionic-framework - 当应用程序在 Ionic 3 的抽屉中时如何更改应用程序导航栏颜色
- python - 是否可以为预训练的 Inception 模型(tensorflow 2.0/Keras)提供 2D 灰度图像?
- python - pyspark:优化对数据帧中的每一行执行sql查询的pandas udf?
- c++ - 返回 T 的引用的 const 函子禁止赋值