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