-7

次のような文字列があります。

TEST|A||B|C|**""**|D|""|||||\r\n
TEST|Z||V|P|**""**|Y||||||||\r\n

| の 5 回目と 6 回目のオカレンスの間にコンテンツを作成する必要があります。内容が「」の場合は空白にします。したがって、望ましい出力は

TEST|A||B|C||D|""|||||\r\n
TEST|Z||V|P||Y||||||||\r\n

したがって、この正規表現パターンを使用して、マッチャー/パターンとマッチャー.replaceFirst() を使用しています。

String regexPattern = "TEST.*\\|([|\\|]*)\\|([|\\|]*)\\|([|\\|]*)\\|([|\\|]*)\\|\"\"\\|([|\\|]*)"

| の 5 回目と 6 回目の "" だけが必要ですが、EMPTY にするために、プログラムは遭遇するすべての "" を EMPTY に置き換えます。

したがって、出力は次のようになります。

TEST|A||B|C||D||||||\r\n
TEST|Z||V|P||Y||||||||\r\n

私が持っている正規表現パターンを変更する必要があるかどうかわかりませんか? または、最初の "" を変更すると、一致したパターンの "" 他の "" を変更しないで、TEST フラグメントの他の出現でそれを変更することをマッチャー クラスに伝える方法はありますか?

アップデート:

とった。非常に混乱して申し訳ありません。私は自分のレベルをできる限り正確/明確にするために最善を尽くします.

質問の言い換え:

パターンを使用して、Java パターンとマッチャー クラスを使用して文字列を検索したいと考えています。

文字列には、データが | で区切られた 2 行があります。\r\n\ で区切られた各行

簡単な例は次のとおりです。

テスト文字列の内容:

TEST|JUNK1|JUNK2|JUNK3|JUNK4|""|JUNK6|""|JUNK8
TEST|JUNK11|JUNK12|JUNK13|JUNK14|""|JUNK16|

JUNK4以降の「」が欲しい| (行内の 5 番目と 6 番目の | の間のコンテンツ) は、上記の例では空/空白になります。その行の他の位置にある "" を変更したくありません。次の行でも同じことが起こる必要があります。

したがって、次の正規表現パターンを Java Matcher と組み合わせて使用​​しています。パターン クラスは次のとおりです。

String regexPattern = "TEST.*\\|([|\\|]*)(\"\")([|\\|]*)\\|";
         

しかし、各行のすべての "" を置き換えていますが、これは私の要件ではありません。

量指定子/POSIX {1} を試しましたが、TestStr の最初の "" の検索が制限されると思っていましたが、無駄でした。

{1} を使用した正規表現:

String regexPattern = "TEST.*\\|([|\\|]*)(\"\"){1}([|\\|]*)\\|";

では、最初の "" までの文字列のフラグメントを取得するためにパターンに制限を加える方法。

4

1 に答える 1

1

複雑な正規表現を使用しない簡単な答え:

String temp[] = inputString.split("\\|");
if ("\"\"".equals(temp[5]))
{
    temp[5] = "";
    StringBuilder buf = new StringBuilder();
    for (String s : temp)
        buf.append("|").append(s);
    inputString = buf.substring(1);
}

また、他の人があなたに言っていることに注意を払ってください。編集機能を使用し、回答として修正を投稿しないでください。

于 2010-09-27T02:52:20.707 に答える