4

假设我有一个类似于以下形式的字符串:

"First/Second//Third/Fourth"Second(注意和之间的双斜线Third

我希望能够将此字符串拆分为以下子字符串"First", "Second//Third", "Fourth"。基本上,我想要的是将字符串拆分为一个字符(在本例中/),而不是该字符的两倍(在本例中//)。我虽然以多种方式对此进行了思考,但无法使其正常工作。

我可以使用 C# 和/或 JavaScript 中的解决方案。

谢谢!

编辑:我想要一个简单的解决方案。我已经想过逐个字符地解析字符串,但这在我的实际使用中太复杂了。

4

4 回答 4

10

尝试使用此 C# 解决方案,它使用正向后视和正向前瞻:

        string s = @"First/Second//Third/Fourth";
        var values = Regex.Split(s, @"(?<=[^/])/(?=[^/])", RegexOptions.None);

它说:分隔符/前面是任何字符,除了/,后面是任何字符,除了/

这是另一个使用负后瞻和前瞻的更短版本:

        var values = Regex.Split(s, @"(?<!/)/(?!/)", RegexOptions.None);

这说:定界符是/没有前面/和后面没有的/

您可以在此处找到有关“环视”的更多信息。

于 2013-02-27T09:49:54.977 回答
5

在 .NET Regex 中,您可以使用否定断言来实现。(?<!/)/(?!/)将工作。使用Regex.Split方法。

于 2013-02-27T09:48:53.523 回答
3

好的,您可以做的一件事是根据/. 您返回的数组将包含所有//已使用位置的空分配。遍历数组并连接i-1i+1分配哪里i是指向空分配的指针。

于 2013-02-27T09:47:17.487 回答
2

这个怎么样:

var array = "First/Second//Third/Fourth".replace("//", "%%").split("/");

array.forEach(function(element, index) {
    array[index] = element.replace("%%", "//");
});
于 2013-02-27T09:46:48.527 回答