Java Regex - Как заменить шаблон начинается с и заканчивается на - PullRequest
0 голосов
/ 18 января 2019

У меня есть 2 сценария:

  1. Строка начинается с страны выборки! то есть Страна образца! Тестовые данные

Я хочу, чтобы регулярное выражение заменило страну выборки! с пустой строкой, страна здесь не исправлена, это может быть США, Франция и т. д.

Я пытался:

System.out.println(str.replaceAll("^(Sample[^!]+!)", ""));

Я получаю вывод

! Test Data 

тогда как я просто хочу

Test Data
  1. Строка заканчивается Страной Образца! т.е. Страна образца данных испытаний! вот и я просто хочу

    Данные испытаний

Может ли кто-нибудь помочь предоставить правильное регулярное выражение с объяснением. Большое спасибо

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Попробуйте это регулярное выражение здесь:

String[] testcases = new String[] {
    "Sample foo ! Test Data", 
    "Sample bar ! Test Data", 
    "Test Data Sample foo !", 
    "Test Data Sample bar !"
};

for (String str : testcases) {
    System.out.println(str.replaceAll("(.* ?)(Sample[a-zA-Z ]+ ! ?)(.*)", "$1$3"));
}

Пояснение:

(.* ?) // first match group, matches anything, followed by an optional space

(Sample[a-zA-Z ]+ ! ?) // second match group, matches the String "Sample followed by a series of letters (your country), a whitespace, an exclamation mark and an optional space

(.*) // third match group, matches anything

Таким образом, вторая группа совпадений ($ 2) будет содержать вашу строку «Страна образца», и мы можем просто заменить результат только первой ($ 1) и третьей ($ 3) группой совпадений.

0 голосов
/ 18 января 2019

Редактировать:

давайте сделаем лучше. у вас будет не только 2 дела у вас будет 3 дела

  1. (шаблон + данные) ---> ^ Образец [^!] +! (шаблон) ([^!]) (данные)

  2. ( данные + шаблон) ---> ([^!]) (данные) Образец [^!] +! $ (шаблон)

  3. (шаблон + данные + шаблон) ---> (^ Sample [^!] +! (шаблон) ([^!]) (данные) Образец [^!] +! $ (образец)

поэтому мы должны проверить все случаи в нашей строке с помощью регулярного выражения. нам нужны случаи ИЛИ в регулярном выражении это "|" Другое дело, что мы должны избегать несоответствующих случаев, должны игнорироваться именно с (? :( regex)) здесь описано

public class HelloWorld {

public static void main(String[] args) {
    String[] testcases = new String[] {
        "Sample foo ! Test1 Data",
        "Sample bar ! Test2 Data",
        "Test3 Data Sample foo !",
        "Test4 Data Sample bar !",
        "Sample bar ! Test5 Data Sample bar !"
    };

    for (String str: testcases) {
        System.out.println(str.replaceAll("(?:(^Sample[^!]+!([^!])))|(?:(([^!])Sample[^!]+!$))|(?:(^Sample[^!]+!([^!]))Sample[^!]+!$)", "$2$4").trim());
    }

}

} мы использовали ваше регулярное выражение и создали новое регулярное выражение после того, как сгруппированные данные будут в ($ 2, $ 4) группах, поэтому мы заменяем строку значениями 2-й и 4-й групп. Я надеюсь, это поможет. код компиляции онлайн

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