我希望你能帮我翻译一下关于IT技术的内容。以下是需要翻译的内容:
我在使用Powershell中的正则表达式时遇到了一些麻烦。似乎存在某种实现错误或其他问题。
我想要处理的文本是一个HTML文件,它看起来像这样(示例1):
<span>[Mobile: %mobile% |] Phone: %telephone% [| Fax: %faxNumber%]</span>
<Span>
问题在于,由于HTML编辑器的原因,我可能会得到像这样的内容(示例2):
<span>[Mobile:
%mobile% |] Phone: %telephone% [| Fax: %faxNumber%]</span>
如您所见,我们得到了换行和HTML转义,修复了空格
。
我的Powershell正则表达式如下:
$x = $x -ireplace '(?ms)\[(.?){7}Fax(.*?)\]', 'MyReplacement1'
and this
$x = $x -ireplace '(?ms)\[(.?){7}Mobile(.*?)\]', 'MyReplacement2'
基本上,[表示变量的开始,]表示结束。这会带来两个问题:
1. 由于我们有两个变量,手机和传真,我使用
(.?){7}
允许一些(这里是7个)字符,避免匹配Mobile附近的第一个[和Fax附近的最后一个]之间的整个部分(如果我使用(.*?)
而不是(.?){7}
将发生这种情况)。我不确定是否有其他方法,可以允许在起始[和变量关键字“Fax”之间的任何数量(而不是7个)字符。这对于避免添加像
这样的内容时产生错误匹配很有用(只有7个字符不够,而像我说的(.*?)
则会失败)。希望我能解释清楚(有点难)-如果不能:请随时提问!2. Powershell的-replace方法没有提供设置正则表达式选项的方式,因此我必须使用(?ms)设置DotAll和multiline模式。如您所见,我在正则表达式模式中使用它。然而:当添加换行符时,就像您在example2中看到的在Mobile:和%mobile%之间,_regex_将失败且不会进行替换!
我非常感谢任何帮助,甚至是来自专家的正则表达式建议,以避免我现在没有考虑到的任何进一步问题...
编辑: (示例3):
<span>[Mobile:
%mobile% |] Phone: %telephone% [| Fax:
%faxNumber%]</span>