Как получить указанную строку в тексте - PullRequest
0 голосов
/ 17 июня 2019

Я хочу получить строку из текста (это текст 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>

1 Ответ

3 голосов
/ 17 июня 2019

Предполагая, что ваш 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] в начале.

Если структура вашего файла во всех случаях одинакова, вы можете получить доступ к свойствам, которые вы упомянули, например:this:

$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 />')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...