按字符分割字符串,但跳过某些字符组合
本文关键字:字符 组合 分割 字符串 | 更新日期: 2023-09-27 18:01:33
假设我有一个类似于以下格式的字符串:
"First/Second//Third/Fourth"
(注意Second
和Third
之间的双斜杠)
我希望能够将此字符串分割为以下子字符串"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-1
和i+1
分配,其中i
是指向空分配的指针。
这个怎么样:
var array = "First/Second//Third/Fourth".replace("//", "%%").split("/");
array.forEach(function(element, index) {
array[index] = element.replace("%%", "//");
});