【发布时间】:2021-07-30 09:28:19
【问题描述】:
我有以下代码:-
'\u0026' -replace '(\u)(\d{4})', '$$([char]0x$2)'
这显然会导致:-
$([char]0x0026)
如果我将 RegEx 替换为可扩展字符串:-
'\u0026' -replace '(\\u)(\d{4})', "$([char]0x`${2})"
然后我会得到:-
表达式或语句中出现意外的标记“0x`$”。
如果我将事情简化为:-
'\u0026' -replace '(\\u)(\d{4})', "0x`${2}"
那么我可以得到:-
0x0026
但是,我想要将“0x0026”转换为字符,以便将“\u0026”替换为“&”。但是,以这种方式将 RegEx 替换标记传递给 PowerShell 子表达式似乎是不可能的。如果您将两种语言分开:-
'\u0026' -replace '(\\u)(\d{4})', "$([char]0x0026) 0x`${2}"
然后会出现以下结果:-
&0x0026
这很好,因为它表明 PowerShell 子表达式在正则表达式替换中确实有效,正如转换后的 & 符号所示。
我是 RegEx 的新手。我已经达到我的极限了吗?
【问题讨论】:
-
也许你应该解释你想要做什么,而不是你是怎么做的。 (见:What the XY problem?)
-
啊,所以你想修改文件中的 HTML 源代码?您能否在问题中包含此类文件的示例?
-
我完全同意@Tomalak,提出的问题是XY problem。要摆脱这个
XY循环,问问自己WHY???(问题中的每个定义)?如:为什么要“& 0x0026”? (并将该信息添加到问题中)。我猜你只是想这样做:[Regex]::Unescape('Jack\u0026Jill')。但即使这样也是一个有问题的答案,因为通常不需要unescape 一个正则表达式...... -
我们仍然没有解决您的实际问题,而只是解决了它的症状。没有理由为什么
\u0026甚至会出现在 HTML 中,除非在生成 HTML 时出现问题(那么这应该被修复),或者它在 JSON 字符串中(然后应该使用 JSON 解析器)。通过正则表达式替换这些转义序列是可能的,但它根本不像您真正需要的东西。 -
@Tomalak - 你是对的,未来也不会有任何修复它的计划,但这不在我的掌控之中。 Intranet 页面是 Sharepoint 页面,我在某处读到某些字符会以这种方式转义。很抱歉没有正确解释背景场景,但我非常感谢大家对此的投入。作为我自己在这个网站上的第一个 OP,我会学习我的错误,下次会更清楚。
标签: regex powershell token expandable