如何使用Powershell从字符串中删除文本的一部分?

托德·韦尔奇

我正在构建电子邮件,但有时需要删除该电子邮件中的这一部分内容,因此我想使用-replace从#HOUSESTART到#HOUSEEND进行替换,但无法正常工作。

$ body包含此部分以及整个HTML电子邮件的更多内容:

"<p class=MsoNormal style='margin-bottom:0in;margin-bottom:.0001pt;line-height:
    normal'><b><u><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:
    "Times New Roman";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri'>#HOUSESTART<o:p></o:p></span></u></b></p>

    <p class=MsoNormal style='margin-bottom:0in;margin-bottom:.0001pt;line-height:
    normal'><b><u><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:
    "Times New Roman";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri'>PLEASE
    NOTE</span></u></b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:
    "Times New Roman";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri'>:&nbsp;
    As a house manager, you have two email addresses.&nbsp; Your secondary email
    address is #EMAIL.&nbsp; The only place you will need to use this email address
    is when you are enrolling any device in the Targeted Threat Protection.<span
    style='mso-spacerun:yes'>  </span><b><span style='background:yellow;mso-highlight:
    yellow'>(Only used in manager welcome emails.)</span><o:p></o:p></b></span></p>

    <p class=MsoNormal style='margin-bottom:0in;margin-bottom:.0001pt;line-height:
    normal'><b><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:
    "Times New Roman";mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri'>#HOUSEEND</span></b><span
    style='mso-ascii-font-family:Calibri;mso-fareast-font-family:"Times New Roman";
    mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri'><o:p></o:p></span></p>

我正在使用此命令尝试删除#HOUSESTART和#HOUSEEND之间的所有内容,但并未删除它。

$body = $body -replace "#HOUSESTART.*#HOUSEEND"," "

任何帮助将不胜感激。

mklement0

默认情况下,..NET正则表达式中的元字符匹配除换行符之外的任何字符

因此,如果要跨多行.*匹配(即也要匹配换行符),必须使用内联regex选项 s(?s)regex的开头):

$body = $body -replace '(?s)#HOUSESTART.*#HOUSEEND', ' '

注:
*我使用'...'(单引号,即逐字字符串),而不是"..."(可扩展(插值)的字符串),以避免什么之间的PowerShell可以解释混淆了前面,什么正则表达式引擎会看到。
*贪婪地.*匹配,以便匹配输入的最后一个实例的所有内容;如果可以有多个实例,并且您只想通过一个实例进行匹配,请使用非贪婪#HOUSEEND .*?

请注意,此字符串$body必须是单行,多行字符串才能起作用。

例如,如果您使用类似$body = Get-Content file.txtset的方法$body,则会得到一个字符串数组每个字符串都将-replace应用于操作,但将无法使用。在这种情况下,请使用-Raw开关确保将文件读取为单行多行字符串:
$body = Get-Content -Raw file.txt

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用通配符在mysql中删除/替换字符串的一部分?

从字符串的一部分中删除文本

如何从特定字符中删除字符串的一部分?

如何从 Python 中的 Pandas DataFrame 中删除字符串的一部分

如何在JavaScript中的“:”之前删除字符串的一部分?

如何在JavaScript中删除字符串的最后一部分?

如何删除B中字符串的第一部分

如何在python列表中删除字符串的一部分?

如何在C中删除字符串的最后一部分

如何在PHP中删除字符串的一部分?

如何使用熊猫删除列值中的URL字符串的第一部分?

删除字符串的一部分

使用Java脚本替换<li>字符串的一部分将删除<a>和<span>标记。如何删除文本而不删除标签?

如何使用VBScript从该字符串中的静态位置显示字符串的一部分?

从R中的数据框行中删除字符串的一部分

PHP:如何用列表中的一些随机文本替换字符串的一部分

如何加粗文本的一部分Android字符串

如何获取文本的一部分,包含短语/单词的字符串?

使用值从另一列中删除字符串的一部分

在文本文件中返回字符串的一部分

如何删除字符串的一部分

如何删除字符串的一部分?

如何删除字符串的最后一部分?

如何删除字符串Monogdb的一部分

如何删除字符串的一部分?

如何删除字符串的一部分?

如果条件存在,如何删除字符串的一部分

如何删除以斜杠开头的字符串的一部分

红宝石,如何删除字符串的第一部分?