заполнители для регулярных выражений - PullRequest
0 голосов
/ 12 октября 2019

Я довольно новичок в регулярных выражениях, и я пока не знаю, как правильно их использовать. В качестве входных данных у меня есть строка, в которой я хочу найти определенный шаблон, скажем, слово, заключенное в!, Например: «Здравствуйте, меня зовут! Джон!». Теперь я хочу заменить подстроку внутри чего-то другого. Как мне искать подстроку, не зная, что внутри?

String str = "Я не знаю! Как это сделать";

str = str.replace ("! заполнитель! "," X ");

Просто так.

Ответы [ 2 ]

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

str.replaceAll("!.*!", "X") был бы способ сделать это. Однако есть много разных «заполнителей» и специальных символов, о которых вам следует знать (по крайней мере, избегать их). В этом случае я использовал . для сопоставления с любым символом и * для обозначения того, что я хочу любое их количество. Выражение затем читается как «заменить все восклицательные знаки, после которых следует любое количество символов и заканчивая в другом восклицательном знаке буквой X».

Это также заменит восклицательные знаки, поэтому, возможно, вы захотите написать str.replaceAll("!.*!", "!X!"). Или, может быть, вы не хотите заменить строку "!!"так что вы бы использовали "!. +!". Но чтобы изучить все возможности, вы должны действительно прочитать какое-то учебное пособие, подобное этому: https://www.vogella.com/tutorials/JavaRegularExpressions/article.html

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

Может быть,

!\w+!\s*

или

!\w+!

может просто работать нормально для этих примеров.

Демо

Тест

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


public class RegularExpression{

    public static void main(String[] args){

        final String regex = "!\\w+!\\s*";
        final String string = "I don't !know!     how to do this\n"
             + "Hello, my name is !John!           ";
        final String subst = "something_else ";

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

        final String result = matcher.replaceAll(subst);

        System.out.println(result);

    }
}

Вывод

I don't something_else how to do this
Hello, my name is something_else

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


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

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