Условная замена в одном выражении регулярного выражения Java - PullRequest
1 голос
/ 13 декабря 2010

У меня есть несколько символов в виде буквенно-цифровых символов, за которыми следует одна цифра.Цифра - это год, и мне нужно перейти к двузначному году, где 9 становится 09, а в любом другом году префиксом - 1.

Например:

GCZ0 -> GCZ10
GCZ1 -> GCZ11
...
GCZ8 -> GCZ18
GCZ9 -> GCZ09

Я играюс ([A-Z]+)([9+])([0-9]+), но я не уверен, как заставить замену условно включить правильный префикс 0 или 1.

Может ли мастер регулярных выражений указать мне правильное направление, пожалуйста?По несчастным причинам, мне нужно сделать это в одном сопоставлении / замене регулярного выражения Java.

Спасибо, Джон

Ответы [ 3 ]

5 голосов
/ 13 декабря 2010

По несчастным причинам, мне нужно сделать это в одном сопоставлении / замене регулярного выражения Java.

Кажется сомнительным, что такое решение существует ... обычным способом было бы использовать Matcher.appendReplacement и Matcher.appendTail для итерации по исходной строке, поиска совпадений с образцом, выполнения произвольной логики над ними, и заменить соответствующие замены.

В Javascript вы можете использовать функцию с String.replace() в качестве «умной замены», а не фиксированной строки.

0 голосов
/ 22 декабря 2010

После дальнейшего изучения и отсутствия других ответов я пришел к выводу, что это невозможно в одном регулярном выражении Java.

0 голосов
/ 13 декабря 2010

Редактировать: Упс, не прочитал условие Regex Replace ...

Ну, не берите в голову то, что я предложил ...

Вот регулярное выражение, которое соответствует именно вам:

^ [A-Z] {3} 9 $

Во всяком случае, с одной заменой, я не понимаю, как вы могли бы сделать это ...

Я надеюсь, что кто-то будет лучше, чем я.

Конец редактирования

Используя StringBuffer, вы можете вставить символ:

StringBuffer sb = new StringBuffer();
sb.append("GCZ0");
if(sb.charAt(3) == '9') sb.insert(2, "0");
else sb.insert(2, "1");

String result = sb.toString();

В result у вас есть нужная строка, которая вам нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...