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

Я пытаюсь разобрать строку URL, чтобы проверить ее для тестирования. Моя строка выглядит

p_videoid=119110,p_videoepnumber= 0,p_videoairdate=NOT NULL,videoseason=null

Моя проблема в том, что для некоторых видео в p_videoepnumber = 0 есть пробел. Мне нужно найти подстроку, которая начинается с p_videoepnumber и заканчивается запятой, а затем удалить все пробелы.

Я хочу, чтобы мой конечный результат выглядел следующим образом:

p_videoid=119110,p_videoepnumber=0,p_videoairdate=NOTNULL,videoseason=null

Я не могу просто удалить все пробелы из строки, потому что есть определенные значения, которые имеют пробел.

Ответы [ 4 ]

2 голосов
/ 02 мая 2019

Исходя из того, что вы сказали, вы можете просто сделать:

string.replace("= ","=");

Если вы хотите изменить только ключ p_videoepnumber:

string.replace("p_videoepnumber= ","p_videoepnumber=");
// Using regex:
string.replaceAll("(p_videoepnumber=)(\\s+)","$1");

Демо

1 голос
/ 02 мая 2019

Вы можете использовать метод String.split:

String[] splitedString = "yourString".split(",");

и затем вы можете выполнить итерацию каждого элемента массива String и найти элемент, начинающийся с p_videoepnumber

for(int i=0; i<splitedString.length; i++){
    if(splitedString[i].startsWith("p_videoepnumber"){
        splitedString[i] = splitedString[i].trim();
     }
}
String parsedString = String.join(",", splitedString);
1 голос
/ 02 мая 2019

Итак, в этой строке:

p_videoid=119110,p_videoepnumber= 0,p_videoairdate=NOT NULL,videoseason=null

Вы хотите поймать p_videoepnumber= 0,.

Первая идея, которая приходит в голову, - попытка сопоставить p_videoepnumber= .*,, но она фактически захватит p_videoepnumber= 0,p_videoairdate=NOT NULL,.

Поскольку вы хотите остановиться на первой запятой, вы фактически будете использовать неохотно сопоставитель.На самом деле вы будете соответствовать p_videoepnumber= .*?, (обратите внимание на дополнительные ?).

С этого момента, вот код комментария:

String req = "p_videoid=119110,p_videoepnumber= 0,p_videoairdate=NOT NULL,videoseason=null";

// Add parenthesis to indicate the group to capture
String regex = "(p_videoepnumber= .*?,)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(req);

// find() finds the next subsequence of the input sequence that matches the pattern.
if (matcher.find()) {
    // Displays the number of found groups : 1
    System.out.println(matcher.groupCount());
    // Displays the found group : p_videoepnumber= 0,
    System.out.println(matcher.group(1));
    // Replace " " with "" in the first group and display the result : 
    // p_videoid=119110,p_videoepnumber=0,p_videoairdate=NOT NULL,videoseason=null
    System.out.println(matcher.replaceFirst(matcher.group(1).replaceAll(" ", "")));
} else {
    System.out.println("No match");
}
0 голосов
/ 02 мая 2019

Этот RegEx может помочь вам сделать это.Он просто создает группу между двумя границами, где пробелы могут быть:

p_videoepnumber=(\s+)[0-9]+,
  • Вы можете просто вызвать эти пробелы с помощью $1 и заменить ее пустой строкой ''.

  • Вы также можете добавить дополнительные границы к этому выражению, если хотите.

enter image description here

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