Как использовать регулярные выражения в Java для изменения префикса и суффикса соответствующих подстрок - PullRequest
1 голос
/ 21 июля 2010

Я хочу (на Java) найти любые подстроки в строке, которые начинаются с, скажем, aba и заканчиваются, скажем, aca, где между ними есть один или несколько непробельных символов.

Например, "blingblangabablahacablingblang найдет подстроку abablahaca.

Затем я хочу заменить каждую из этих подстрок, изменив начало на b, а конец на ca, но оставив внутренний blah таким, какой он был.

Например, "blingblangabablahacablingblang будет изменено на blingblangbblahcablingblang.

Есть ли какой-нибудь способ, которым я могу сделать это, используя String.replaceAll ()? В исходной строке будет много экземпляров, которые нужно изменить.

Спасибо за вашу помощь.

Ответы [ 5 ]

2 голосов
/ 21 июля 2010

Вы можете попробовать:

myString.replaceAll("aba(\\w*?)aca", "b$1ca") // would also match abaaca, without blah in the middle

или

myString.replaceAll("aba(\\w+?)aca", "b$1ca") // match onlu if there is a char between aba and aca
2 голосов
/ 21 июля 2010

Я не знаю о Java, но регулярное выражение должно просто заменить 'aba (. +?) Aca' на 'b $ 1ca'.

0 голосов
/ 21 июля 2010

Что не так с простыми if string.startsWith () и string.endsWith () и затем заменить подстроку меньше, чем start и end, а затем перестроить новую строку?

0 голосов
/ 21 июля 2010

Если гарантируется, что и aba, и aca являются уникальными в данной последовательности символов, тогда вы можете использовать старый добрый String#replace вместо регулярных выражений:

String result = original.replace("aba","b").replace("aca", "ca");
0 голосов
/ 21 июля 2010

Попробуйте этот шаблон: aba[a-z]*aca

Pattern p = Pattern.compile("aba[a-z]*aca");
Matcher m = p.matcher("blingblangabablahacablingblang");
while (m.find())
   System.out.println(">" + m.group() + "<");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...