假设我有一个类似于此形式的字符串:
"First/Second//Third/Fourth"
(请注意Second
和Third
之间的双斜杠
我希望能够将此字符串拆分为以下子字符串"First", "Second//Third", "Fourth"
。基本上,我想要的是通过char(在这种情况下为/
)分割字符串,但不是由该char的两倍(在这种情况下为//
)。我虽然在很多方面,但无法让它发挥作用。
我可以使用C#和/或JavaScript中的解决方案。
谢谢!
编辑:我想要一个简单的解决方案。我已经想过用char解析字符串char,但这在我的实际使用中太复杂了。
答案 0 :(得分:8)
尝试使用这种C#解决方案,它使用积极的lookbehind和积极的前瞻:
string s = @"First/Second//Third/Fourth";
var values = Regex.Split(s, @"(?<=[^/])/(?=[^/])", RegexOptions.None);
它说:分隔符为/
,前面是除/
之外的任何字符,后跟除/
之外的任何字符。
这是另一个更短的版本,使用负面的lookbehind和lookahead:
var values = Regex.Split(s, @"(?<!/)/(?!/)", RegexOptions.None);
这表示:分隔符为/
,前面没有/
,后面没有/
您可以找到有关'lookarounds' here 的更多信息。
答案 1 :(得分:5)
在.NET Regex中,您可以使用否定断言来执行此操作。(?<!/)/(?!/)
将起作用。使用Regex.Split
方法。
答案 2 :(得分:3)
你可以做的一件事是根据/
拆分字符串。您获取的数组将包含所有使用的//
位置的空分配。循环遍历数组并连接i-1
和i+1
分配,其中i
是指向空分配的指针。
答案 3 :(得分:2)
这个怎么样:
var array = "First/Second//Third/Fourth".replace("//", "%%").split("/");
array.forEach(function(element, index) {
array[index] = element.replace("%%", "//");
});