【发布时间】:2020-10-28 17:15:03
【问题描述】:
给定一个匹配/dir1/ 的字符串(路径),我需要用破折号替换所有空格。
例如:/dir1/path with spaces 应该变成 /dir1/path-with-spaces。
这可以很容易地分两步完成...
var rgx = new Regex(@"^\/dir1\/");
var path = "/dir1/path with spaces";
if (rgx.isMatch(path))
{
path = (new Regex(@" |\%20")).Replace(path, "-");
}
对我来说不幸的是,该应用程序已经构建了一个简单的 RegEx 替换并且无法修改,所以我需要让 RegEx 来完成这项工作。我以为我在这里找到了答案: regex: how to replace all occurrences of a string within another string, if the original string matches some filter
并且能够创建和测试(?:\G(?!^)|^(?=\/dir1\/.*$)).*?\K( |\%20),但后来我了解到它在这个应用程序中不起作用,因为\K 是一个无法识别的转义序列(.NET 中不支持)。
我也尝试了积极的后视,但我无法让它替换所有空格(如果匹配是贪婪的,则只有最后一个空格,如果不贪婪,则只有第一个空格)。我可以进行足够的检查来处理最大数量的空格,但是一旦我检查了 10 个空格,就会有人通过一个有 11 个空格的路径。
对于这个问题,是否有一个仅适用于 .NET 引擎的 RegEx 解决方案?
【问题讨论】: