首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell从转换到HTML修改HTML

Powershell从转换到HTML修改HTML
EN

Stack Overflow用户
提问于 2013-04-23 22:10:43
回答 1查看 1.4K关注 0票数 1

我有一个脚本,它生成一个以HTML格式发送出去的对象数组。那部分运作得很好。我试图修改HTML字符串,使某些行成为不同的字体颜色。

html字符串的一部分如下(仅2行):

代码语言:javascript
运行
复制
<tr>
    <td>ABL - Branch5206 Daily OD Report</td>
    <td>'\\CTB052\Shared_Files\FIS-BIC Reporting\Report Output Files\ABL\Operations\Daily\ABL - Branch5206 Daily OD Report.pdf'</td>
    <td>13124</td>
    <td>4/23/2013 8:05:34 AM</td>
    <td>29134</td>
    <td>0</td>
    <td>Delivered</td>
</tr>

<tr>
    <td>ABL - Branch5206 Daily OD Report</td>
    <td>'\\CTB052\Shared_Files\FIS-BIC Reporting\Report Output Files\ABL\Operations\Daily\ABL - Branch5206 Daily OD Report.xls'</td>
    <td>15716</td>
    <td>4/23/2013 8:05:34 AM</td>
    <td>29134</td>
    <td>0</td>
    <td>Delivered</td>
</tr>

我尝试regex将字体颜色添加到行的开头和末尾,行的末尾以“已传递”结束:$email = [regex]::Replace($email, "<tr><td>(.*?)Delivered</td></tr>", '<tr><font color = green><td>$1Delivered</td></font></tr>')

这不起作用(我不确定你是否能为整行设置字体颜色)。

对于如何容易地/有效地做这件事,有什么想法吗?我必须在几个不同的状态下做这件事(比如交付)。

EN

回答 1

Stack Overflow用户

发布于 2013-04-24 03:04:40

免责声明: HTML 不能由正则表达式解析器解析。正则表达式不能提供这个问题的一般解决方案。但是,如果您的HTML结构是众所周知的,并且您没有任何其他<tr></tr>元素,那么下面的内容可能会有效。但是,在这一点上,是否有什么原因不能修改HTML生成来完成这个任务,而不是等到HTML已经生成?

尝试以下命令:

代码语言:javascript
运行
复制
PS > $email = $email -replace '(?s)<tr>(.*?)<td>Delivered</td>(.*?)</tr>','<tr style="color: #FF0000">$1<td>Delivered</td>$2</tr>'

第一个字符串是模式。(?s)告诉解析器允许.接受换行符;这称为“单行”模式。然后,它获取一个包含字符串<tr><td>Delivered</td>元素。这两个捕获组获取<tr>元素中围绕<td>Delivered</td>字符串的其他所有内容。注意*s. *后面的问号本身是贪婪的,匹配尽可能多的文本;*?匹配尽可能少的文本。如果我们只在这里使用*,它将把整个字符串作为一个匹配项来处理,并且只替换第一个<tr>

第二个字符串是替换字符串。它使用添加的样式属性将<tr>元素和它的内容按回位置,所有这些都没有back ref。

另一个次要的音符是引语。无论如何,我倾向于单引号,但在这种情况下,您可能会在替换字符串中使用双引号。所以单引号可能是最好的选择。

至于如何在不同的状态下这样做,正则表达式实际上不是为这样的条件内容而设计的,这就像尝试使用螺丝刀作为演练一样。您可以硬编码几个替换或循环状态/颜色对,并构建您的模式,并从它们替换字符串。如果您能够为.NET找到一个完整的HTML解析器,那么它的效率会更高;如果您能够保证一个XML解析器是有效的,那么您可以尝试使用它。或者,回到我一开始的问题,您可以修改HTML生成。然而,如果你的电子邮件数量很少,这可能不是一个值得解决的瓶颈。所花费的开发时间也是昂贵的。看看它是否足够快,如果不是,尝试另一条路线。

值得称赞的是:我从@FrankieTheKneeMan获得了HTML样式属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16180055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档