Пара вопросов:
1) Как заставить следующее регулярное выражение, основанное на поисковом литерале ^, работать для поискового литерала |
поисковый литерал ^ на основе регулярного выражения (которое работает нормально,который является одним из ценных материалов этого форума):
String intermediateResult = in.replaceAll( "(TEST\\^[^^]*\\^\\^[^^]*\\^[^^]*\\^)\"\"\\^", "$1^" );
String finalResult = intermediateResult.replaceAll( "(TEST\\^[^^]*\\^)(\\^[^^]*\\^[^^]*\\^([^\"\\^].*|\"[^\"].*))", "$1ST$2" );
Когда я заменяю ^ (где это необходимо) на |следующим образом - я не получаю желаемый результат (он ничего не меняет в данной строке):
String intermediateResult = in.replaceAll( "(TEST\\|[\\|\\|]*\\|[\\|\\|]*\\|[\\|\\|]*\\|[\\|\\|]*\\|)\"\"\\|", "$1|" );
String finalResult = intermediateResult.replaceAll( "(TEST\\|[\\|\\|]*\\\\|)(\\|[\\|\\|]*\\|[\\|\\|]*\\|([^\"\\^].*|\"[^\"].*))", "$1ST$2" );
Есть ли известные проблемы с |в регулярном выражении Java или мне нужно иметь регулярное выражение для поиска литерала |
Итак, я попробовал этот способ, но безуспешно (имея \\ | вместо \ |):
Первое регулярное выражение изменяет все места, которые похожи на | "" |в данной строке, хотя я ожидаю, что она будет пустой, только если содержимое между 5-м и 6-м появлением |есть "", не знаю почему.Второе регулярное выражение по какой-то причине вообще не меняет строку.
String intermediateResult = in.replaceAll( "(TEST\\|[\\|\\|]*\\\\|[\\|\\|]*\\\\|[\\|\\|]*\\\\|[\\|\\|]*\\\\|)\"\"\\|", "$1|" );
String finalResult = intermediateResult.replaceAll( "(TEST\\|[\\|\\|]*\\\\|)(\\\\|[\\|\\|]*\\\\|[\\|\\|]*\\|([^\"\\^].*|\"[^\"].*))", "$1ST$2" );
2) Кроме того, что подразумевается под частью совпадения и строкой замены этого регулярного выражения:
String finalResult = intermediateResult.replaceAll( "(TEST\\^[^^]*\\^)(\\^[^^]*\\^[^^]*\\^
**([^\"\\^].*|\"[^\"].*)**)", "**$1ST$2**" );
Крайне извиняюсь за путаницу и длинный пост;Я собираюсь опубликовать только один вопрос и опубликовать другой вопрос в другом сообщении для ясности.
Разработка первого вопроса из исходного электронного письма:
У меня есть следующая строка(каждая строка отделена \ r \ n).Первое регулярное выражение, связанное с поиском литерала |предполагается, что содержимое между вторым и третьим вхождением |пусто, и если содержание между 5 и 6 |is "", затем оставьте это поле пустым.
2-е регулярное выражение (снова связанное с |) должно видеть, является ли содержимое между 5-м и 6-м появлением |не является пустым и не нулевым, затем создайте содержимое между вторым вхождением 2-го и 3-го как ST.
Пример следующим образом:
Существующая строка:
TEST|X||Y||**""**|C|""|\r\n\
TEST|Z||Y||SOMETHING OTHER THAN "" OR empty||\r\n\
Желаемыйвыводится, когда запускаются |
связанные два регулярных выражения replaceall()
из исходного сообщения:
TEST|X||Y|||C|""|\r\n\
TEST|Z|**ST**|Y||SOMETHING OTHER THAN "" OR empty||\r\n\