我想从输入字符串中只获取clientid
和dstid
。这是我试过的代码:
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
有任何建议如何解决?
答案 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+)"
匹配clientId
或Dstid
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
希望这有帮助。