ReplaceAll с помощью regex удаляет один дополнительный символ, который не требуется в Java - PullRequest
1 голос
/ 27 октября 2019

У меня есть текст, как показано ниже

blah blah blah test.this@gmail.com blah blah  
blah blah blah jjathis.this @gmail.com blah blah  
blah blah blah this.this.this@gmail.com blah blah this 

Я хочу заменить все «это» слово на «это» слово, кроме «это» начинается с «.». Так что здесь ".this" не должен заменяться, все остальное должно заменяться. Я написал ниже код.

replaceAll("[^\\.]"+"this", "that")  

Это не заменяет .this, но проблема в том, что он рассматривает один дополнительный символ перед строкой. Пример: jjathis идет как jjthat. но это должен быть jjathat.
Почему replaceall меняет еще один дополнительный символ при запуске? Каким должно быть решение?
Пожалуйста, помогите.

1 Ответ

0 голосов
/ 27 октября 2019

Может быть,

(?<!\\.)this

, замененный на

that

, может работать нормально.

Тест

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){

        final String regex = "(?<!\\.)this";
        final String string = "blah blah blah test.this@gmail.com blah blah  \n"
             + "blah blah blah jjathis.this @gmail.com blah blah  \n"
             + "blah blah blah this.this.this@gmail.com blah blah this ";
        final String subst = "that";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        final String result = matcher.replaceAll(subst);

        System.out.println(result);

    }
}

Выход

blah blah blah test.this@gmail.com blah blah  
blah blah blah jjathat.this @gmail.com blah blah  
blah blah blah that.this.this@gmail.com blah blah that 

Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


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