0

分割しているコンマ区切り文字の文字列があります。ただし、これらの文字の一部はコンマである可能性があります。例えば:

test = "a,b,c,d,,,e,f,g"

(?<!,),これは「コンマが前に付いていない任意のコンマ」,(?!,)の正規表現であり、「コンマが後に続く任意のコンマ」の正規表現であることを私は知っています。誰かが私を正しい方向に向けて、これら2つを組み合わせる方法を教えてもらえますか。必要な出力は次のとおりです。

a  
b  
c  
d  
,  
e  
f  
g  

プログラムはJavaであるため、誰かがJavaに固有の機能を知っていれば、それも機能します。

4

5 に答える 5

1

Similar issue tackled in Regex: replace single characters

Just merging the two regexes that you have, as (?<!,),(?!,) should do the trick, unless there are subtle differences between ruby and Java in this area.

If you want to delete all single , and replace ,,, with , specifically, then you could run search and delete the matched chars from (?<!,)?,(?!,) twice.

于 2013-01-08T01:58:15.033 に答える
1

(.)(?:,|$)先読み/後読みの代わりに使用できます。

(?:,|$)最後の文字の間または行末のコンマに一致し、文字(.)をキャプチャします。

split明らかに、これは、文字列のメソッドで式を使用している場合ではなく、正規表現式と照合している場合にのみ機能します。その場合、あなたが提案したように、 を使用して行う必要があります^(?<=,),^(?!=,)

于 2013-01-08T02:13:54.860 に答える
1

その前後に,ない場合にのみ分割します。,

    String str = "a,b,c,d,,,e,f,g";
    String regex = "(?<!,),|,(?!,)";

    for(String s : str.split(regex)) {            
        System.out.println(s);
    }

出力:

a
b
c
d
,
e
f
g
于 2013-01-08T02:58:58.370 に答える
0

次の例では、コンマが続く文字を検索し、最初の文字のみを取得して最後のコンマを削除します。

        String test = "a,b,c,d,,,e,f,g";
        Pattern p=Pattern.compile(".,|.$");
        Matcher m=p.matcher(test);
        while(m.find() ){                    
            System.out.println(m.group().charAt(0));
        }
于 2013-01-08T02:10:44.867 に答える
0

データ分割の場合、コマのペアを見つけて、それらの間に特別なマークを配置できる"a,b,c,d,,,,,e,f,g"ように見えるはずであると仮定します。a b c d , , e f gこのようにして、その特別なマークが付いたコマは削除する必要があることを知ることができますが、特別なマークが付いたコマは残す必要があります。そのアイデアに基づくコードは次のようになります

String data = "a,b,c,d,,,,,e,f,g";
data = data.replace(",,", ",XspecialSplitX,");

String[] tokens = data.split(",XspecialSplitX|(?<!XspecialSplitX),");
for (String s : tokens)
    System.out.print(s+" ");

出力:a b c d , , e f g


正規表現を使用しないより高速で簡単な方法。文字列にコンマで区切られた単一
の文字 のみが含まれている場合、必要なすべての文字のインデックスは偶数で、区切りのコンマは奇数になります。この場合、このようにすべての偶数インデックスを反復処理するだけです。

char[] data="a,b,c,d,,,e,f,g".toCharArray();
for(int i=0; i<data.length; i+=2)
    System.out.println(data[i]);
于 2013-01-08T02:35:50.370 に答える