Я новичок в Java Regex.
Извините за длинное сообщение.
У меня есть три требования:
1a) У меня есть строка, которая содержит три вхождения слова «ТЕСТ». За каждым этим словом следует ^, и мне нужно проверить, является ли содержимое между 2 и 3 вхождением ^ пустым, если оно пустое / пустое, продолжите поиск, чтобы увидеть, является ли содержимое между 5 и 6 вхождением ^ «»
Если это "", то замените его на пустое / пустое
Пример:
Существующая строка:
aaaa^
TEST^x^^y^z^""^cccc^bbb^
Ожидаемая строка:
aaaa^
TEST^x^^y^z^^cccc^bbb^
1b) Если содержимое между 2-м и 3-м вхождением ^ не пустое и не "", то не изменяйте содержимое между 5-м и 6-м вхождениями
Существующая строка:
TEST^p^^q^r^""^lll^mmm^
Ожидаемая строка:
TEST^p^^q^r^""^lll^mmm^
Мне нужно повторять эту логическую проверку всякий раз, когда найдено слово TEST.
1c) Если содержимое между 5-м и 6-м вхождением ^ не пустое и не "", а если содержимое между 2-м и 3-м пустым / пустым, замените его на STR.
Существующая строка:
TEST^g^^q^r^YYY^lll^mmm^
Ожидаемая строка:
TEST^g^STR^q^r^YYY^lll^mmm^
Мне нужно выполнить все вышеперечисленные случаи в регулярном выражении Java. Я мог бы заставить дело 1 работать на основе ценного вклада из моей предыдущей публикации на этом форуме. Я не мог заставить дело 2 и 3 работать.
Как выполнить случаи 2 и 3 в одном и том же выражении регулярного выражения (я не уверен, каковы выражения регулярного выражения для проверки не пустой контнет и проверки 'ИЛИ').
В мире без регулярных выражений, если говорить просто, я могу позаботиться о 3 случаях следующим образом:
if (the content between 2nd and 3rd occurence of ^ is empty)
{
if(content between 5th and 6th occurence of ^ is "")
{
make this content empty
}
else
{
set the content between 2nd and 3rd occurence of ^ as STR
}
}
Но так как мне нужно сделать эту проверку для каждой строки, которая начинается со слова TEST в строке, я склоняюсь к регулярному выражению.
До сих пор регулярное выражение, которое работает для случая 1, выглядит следующим образом:
str.replaceAll("(TEST\\^[^^]*\\^\\^[^^]*\\^[^^]*\\^)\"\"", "$1")
Для 2-го случая я попытался изменить приведенное выше регулярное выражение следующим образом, но безуспешно (Пытался найти не пустое ЗНАЧЕНИЕ МЕЖДУ 2-Й И 3-Й ПОЛУЧЕНИЕМ, где i asSumed *\\d0$
представляет ПУСТОЙ, а [\\d0$]
означает ПУСТОЙ):
str.replaceAll("(TEST\\^[^^]*\\^[^\\d0$]\\^[^^]*\\^[^^]*\\^)\"\"", "$1")
Любая помощь в создании выражения регулярных выражений, которая учитывает вышеупомянутые 3 варианта использования, высоко ценится, поскольку у меня есть крайний срок для выполнения этой задачи.
Любая помощь очень ценится.
Заранее спасибо.