【发布时间】:2023-03-22 21:59:01
【问题描述】:
我在 Powershell 中使用 Rexex 时遇到了一点麻烦。似乎有一个实施错误或什么的。
我要使用的文本是一个 html 文件,它看起来像这样(示例 1):
<span>[Mobile: %mobile% |] Phone: %telephone% [| Fax: %faxNumber%]</span>
<Span>
问题是,由 html 编辑器引起的,我也可能会得到这样的东西(Example2):
<span>[Mobile:
%mobile% |] Phone: %telephone% [| Fax: %faxNumber%]</span>
如您所见,我们得到了换行符和 html 转义,修复了空格 &nbsp;。
我的 Powershell 正则表达式如下所示:
$x = $x -ireplace '(?ms)\[(.?){7}Fax(.*?)\]', 'MyReplacement1'
还有这个
$x = $x -ireplace '(?ms)\[(.?){7}Mobile(.*?)\]', 'MyReplacement2'
基本上 [ 标记变量的开始,] 标记变量的结束。由此产生两个问题:
- 由于我们有两个变量,移动和传真,我使用
(.?){7}来允许一些(这里正好是 7 个)字符,并避免匹配 第一个 [ 靠近 Mobile 和 Fax 附近的最后一个 ](如果我使用(.*?)而不是(.?){7}会发生这种情况)。我不确定是否有替代方法,例如,我可以在起始 [ 和变量关键字“Fax”之间允许任意数量(而不是 7 个)字符。当添加&nbsp;&nbsp;之类的内容时,这对于避免不匹配很有用(其中只有 7 个字符是不够的,就像我说的(.*?)会失败)。希望我能够解释它(有点难) - 如果没有:请随时提问! - Powershells -replace 方法不提供设置正则表达式选项的方法,因此我必须使用 (?ms) 来设置 DotAll 和多行模式。如您所见,我在我的正则表达式模式中使用它。但是:当添加换行符时,如您在示例 2 中看到的,在词 Mobile: 和 %mobile% 之间,正则表达式失败,没有任何东西被替换!
我非常感谢专业人士的任何帮助,甚至是正则表达式的建议,以避免我现在没有考虑的任何进一步的问题......
编辑: (例3):
<span>[Mobile:
%mobile% |] Phone: %telephone% [| Fax:
%faxNumber%]</span>
【问题讨论】:
-
是的,我已经看到了。看看我对答案的评论,让我们在这里删除我们的 cmets ;)
标签: html regex powershell powershell-3.0