如何从一行中过滤掉一些字符串?

时间:2014-03-04 05:16:23

标签: java regex

我想从输入字符串中只获取clientiddstid。这是我试过的代码:

String input = "User clientId=287372.Dstid=129 Some more text clientId=336263. Dstid=2451. This clientNum=120";

Pattern p = Pattern.compile("(clientId=)(\\d+)(Dstid=)(\\d+)");
Matcher m = p.matcher(input);

StringBuffer result = new StringBuffer();

while (m.find()) {
  System.out.print("clint id : " + m.group(1));
  System.out.println("Dst id : " + m.group(2));
}

m.appendTail(result);
System.out.println(result);

但我得到的输出是:

  

用户clientId = 287372.Dstid = 129这里是一些文本clientId = 336263。 Dstid = 2451。此clientNum = 120

有任何建议如何解决?

5 个答案:

答案 0 :(得分:1)

请尝试以下正则表达式

(clientId=[0-9]+)[.\s]*(Dstid=[0-9]+)

确保在使用时逃脱\

Pattern p = Pattern.compile("(clientId=[0-9]+)[.\\s]*(Dstid=[0-9]+)");

答案 1 :(得分:0)

String input = "User clientId=287372.Dstid=129 Some more text clientId=336263. Dstid=2451. This clientNum=120";
String[] numbers = input.split("[^0-9]+");
for(int i=0; i<numbers.length; i++){
    if(numbers[i].length()!=0){
        if(i%2==0){
            System.out.println("Dstid: "+numbers[i]);
        }
        else{
            System.out.println("clientId: "+numbers[i]);
        }
    }
}

答案 2 :(得分:0)

您忘记在两个ID之间的正则表达式中添加句点。此外,组由括号决定,因此您需要第二组和第四组。你还需要在句号和时间段之间添加一个可能的空格。 Dstid,因为后者的比赛之间有空格。

String input = "User clientId=287372.Dstid=129 Some more text clientId=336263. Dstid=2451. This clientNum=120";

Pattern p = Pattern.compile("(clientId=)(\\d+).[\\s]?(Dstid=)(\\d+)");
Matcher m = p.matcher(input);

StringBuffer result = new StringBuffer();

while (m.find()) {
  System.out.print("client id: " + m.group(2) + " & ");
  System.out.println("Dst id: " + m.group(4));
}

m.appendTail(result);
System.out.println(result);

输出:

client id: 287372 & Dst id: 129
client id: 336263 & Dst id: 2451
User clientId=287372.Dstid=129 Some more text clientId=336263. Dstid=2451. This clientNum=120

答案 3 :(得分:0)

你的正则表达式应该是

"(clientId=)(\\d+)|(Dstid=)(\\d+)"

匹配clientIdDstid

 String input = "User clientId=287372.Dstid=129 Some more text clientId=336263. Dstid=2451. This clientNum=120";

Pattern p = Pattern.compile("(clientId=)(\\d+)|(Dstid=)(\\d+)");
Matcher m = p.matcher(input);

StringBuffer result = new StringBuffer();

while (m.find()) {
  System.out.println(m.group());
//  System.out.println("Dst id : " + m.group(2));
}

输出:

clientId=287372
Dstid=129
clientId=336263
Dstid=2451

答案 4 :(得分:0)

您可以使用扫描仪完成所需的工作。这是示例代码

    String input = "User clientId=287372.Dstid=129 Some more text clientId=336263. Dstid=2451. This clientNum=120. Some more text clientId=12345. Dstid=2421.";

    Scanner s = new Scanner(input);

    Pattern p = Pattern.compile("(clientId=)(\\d+).[ ]*(Dstid=)(\\d+)");
    while(s.findInLine(p)!=null) {
          MatchResult res = s.match();
          System.out.println("clint id : " +res.group(2));
          System.out.println("Dst id : " + res.group(4));
    }
    s.close();

以下是此代码的输出。

clint id : 287372
Dst id : 129
clint id : 336263
Dst id : 2451
clint id : 12345
Dst id : 2421

希望这有帮助。