4

次のような形式の文字列があるとします。

"First/Second//Third/Fourth"Second(との間の二重スラッシュに注意してくださいThird)

この文字列を次の部分文字列に分割できるようにしたいと考えています"First", "Second//Third", "Fourth"。基本的に、私が望むのは、文字列を文字 (この場合は/) で分割することですが、その文字の倍数 (この場合は ) では分割しません//。私はこれをさまざまな方法で考えましたが、機能させることができませんでした。

C# や JavaScript でソリューションを使用できます。

ありがとう!

編集:簡単な解決策が欲しいです。文字列 char を char ごとに解析することは既に考えましたが、実際の使用では複雑すぎます。

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

あなたができることの1つは、に基づいて文字列を分割することです/。返される配列には、使用されたすべての場所の空の割り当てが含まれます//。配列をループして連結i-1し、i+1割り当てを行います。ここiで、 は空の割り当てへのポインタです。

于 2013-02-27T09:47:17.487 に答える
2

How about this:

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

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