正则表达式,用于匹配变量和逗号之间的空格

时间:2019-05-02 15:45:18

标签: java regex

我正在尝试解析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 个答案:

答案 0 :(得分:2)

根据您所说的内容,您可以轻松地做到:

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

如果您只想更改p_videoepnumber键:

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

Demo

答案 1 :(得分:1)

因此,在此字符串中:

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

您想抓住p_videoepnumber= 0,

想到的第一个想法是尝试匹配p_videoepnumber= .*,,但实际上它会捕获p_videoepnumber= 0,p_videoairdate=NOT NULL,

当您想在第一个逗号处停止时,实际上将使用reluctant匹配器。您实际上将与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");
}

答案 2 :(得分:1)

您可以使用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);

答案 3 :(得分:0)

This RegEx可能会帮助您。它只是在两个可能存在空格的边界之间创建一个组:

p_videoepnumber=(\s+)[0-9]+,
  • 您可以简单地用$1调用这些空格,并用空字符串''代替。

  • 如果愿意,还可以向此表达式添加其他边界。

enter image description here