【问题标题】:How to get specified string in a text如何在文本中获取指定的字符串
【发布时间】:2019-06-17 21:37:48
【问题描述】:

我想从一个文本中获取一个字符串(它是一个 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。但是要让它作为 XML 工作,您在顶部缺少一个 标记,并且 开始标记与 结束标记不匹配。如果您想将其作为字符串处理,这不是问题,但如果您想将其转换为 xml 类,则必须先修复它。这可以让您使用 select-xml 和 xml 类方法对其进行导航。
  • 感谢您的来信。我不是在生成 HTML,它是自动生成的,所以不会错,但这不是重点。我不想将其转换为 XML,我只想从文本中获取电子邮件和正文。

标签: powershell


【解决方案1】:

假设您的 HTML 是有效的(您粘贴的示例并非如此,如果它正是您从应用程序中得到的,您必须以某种方式更正它)。

处理更正后的示例(添加&lt;html&gt; 标签,根据this answer 更正&lt;meta&gt;):

[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] 转换它的原因。 p>

如果您的文件结构在所有情况下都完全相同,您可以像这样访问您提到的属性:

$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 />')

【讨论】:

    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多