У меня есть следующая строка:
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
Поэтому я использую matcher / pattern и matcher.replaceFirst (), используя этот шаблон регулярного выражения:
String regexPattern = "TEST.*\\|([|\\|]*)\\|([|\\|]*)\\|([|\\|]*)\\|([|\\|]*)\\|\"\"\\|([|\\|]*)"
Хотя я хочу только "" в 5 и 6 случаях | чтобы стать ПУСТОЙ, программа заменяет все "", с которыми сталкивается, ПУСТОЙ.
Таким образом, вывод выглядит следующим образом:
TEST|A||B|C||D||||||\r\n
TEST|Z||V|P||Y||||||||\r\n
Я не уверен, что мне нужно изменить шаблон регулярных выражений, который у меня есть? ИЛИ есть ли способ сообщить классу соответствия, что после того, как он изменит первый, «не изменяет другой» в этом сопоставленном шаблоне, но изменит его в другом случае фрагмента TEST, если да, то как?
Обновление:
Понял. Чрезвычайно извините за мега путаницу. Я буду стараться изо всех сил, чтобы сделать его максимально точным / понятным.
Перефразированный вопрос:
Я хочу использовать шаблон для поиска в строке, используя классы java Pattern и matcher.
Строка состоит из двух строк с данными, разделенными | и каждая строка разделена \ r \ n \
Упрощенный пример выглядит следующим образом:
Содержимое TestString:
TEST|JUNK1|JUNK2|JUNK3|JUNK4|""|JUNK6|""|JUNK8
TEST|JUNK11|JUNK12|JUNK13|JUNK14|""|JUNK16|
Я хочу "" после JUNK4 | (содержимое между 5-м и 6-м появлением | в строке) в приведенном выше примере должно быть пустым / пустым.
Я не хочу, чтобы "" в других позициях этой линии менялся. То же самое должно произойти в следующей строке.
Поэтому я использую следующий шаблон регулярных выражений в сочетании с классами Java Matcher и Pattern следующим образом:
String regexPattern = "TEST.*\\|([|\\|]*)(\"\")([|\\|]*)\\|";
Но он заменяет все вхождения "" в каждой строке, и это не соответствует моему требованию.
Я пробовал квантификатор / POSIX {1}, но тщетно думал, что это ограничит поиск первого "" в TestStr, но тщетно.
Regex с использованием {1}:
String regexPattern = "TEST.*\\|([|\\|]*)(\"\"){1}([|\\|]*)\\|";
Итак, как сделать ограничение в шаблоне, чтобы получить фрагмент строки до первого "".