регулярное выражение: заменить соответствие его индексом - PullRequest
4 голосов
/ 09 июля 2010

Как я могу преобразовать строку "abacdaa" в строку "1 b 2 cd 3 4" с помощью регулярного выражения?

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

s/a/ \????? /g

Ответы [ 2 ]

4 голосов
/ 09 июля 2010

Эта замена сделает это.

$ perl -p -e 's/a/++$i/ge' 
a b a c d a a
1 b 2 c d 3 4
  • e Оцените правую часть как выражение.
  • g Заменить глобально, то есть все вхождения.
0 голосов
/ 09 июля 2010

В Java regex вы бы использовали цикл Matcher.find(), используя Matcher.appendReplacement/Tail, который в настоящее время занимает только StringBuffer.

Итак, что-то вроде этого работает ( см. Также на ideone.com ):

    String text = "hahaha that's funny; not haha but like huahahuahaha";
    Matcher m = Pattern.compile("(hu?a){2,}").matcher(text);

    StringBuffer sb = new StringBuffer();
    int index = 0;
    while (m.find()) {
        m.appendReplacement(sb,
            String.format("%S[%d]", m.group(), ++index)
        );
    }
    m.appendTail(sb);

    System.out.println(sb.toString());
    // prints "HAHAHA[1] that's funny; not HAHA[2] but like HUAHAHUAHAHA[3]"

API ссылки

См. также

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