次のような文字列があります。
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}([|\\|]*)\\|";
では、最初の "" までの文字列のフラグメントを取得するためにパターンに制限を加える方法。