按字符分割字符串,但跳过某些字符组合

本文关键字:字符 组合 分割 字符串 | 更新日期: 2023-09-27 18:01:33

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

"First/Second//Third/Fourth"(注意SecondThird之间的双斜杠)

我希望能够将此字符串分割为以下子字符串"First", "Second//Third", "Fourth"。基本上,我想要的是通过一个字符(在本例中为/)分割字符串,但不是通过该字符的double(在本例中为//)。我想了很多方法,但都没有成功。

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

谢谢!

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

按字符分割字符串,但跳过某些字符组合

试试这个c#解决方案,它使用正向向后看和正向向前看:

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

它说:分隔符是/,前面是除/以外的任何字符,后面是除/以外的任何字符。

下面是另一个简短的版本,使用否定的向后看和向前看:

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

这表示:分隔符是/,它前面没有/,后面也没有/

你可以在这里找到更多关于'lookarounds' 的信息

在。net Regex中,您可以使用否定断言来完成此操作。(?<!/)/(?!/)将工作。使用Regex.Split方法

ok,您可以做的一件事是基于/拆分字符串。返回的数组将包含使用//的所有位置的空分配。循环遍历数组并连接i-1i+1分配,其中i是指向空分配的指针。

这个怎么样:

var array = "First/Second//Third/Fourth".replace("//", "%%").split("/");
array.forEach(function(element, index) {
    array[index] = element.replace("%%", "//");
});