Bha*_*ddy 4 java regex string pattern-matching
我有以下格式的以下java字符串.
String s = "City: [name:NYK][distance:1100] [name:CLT][distance:2300] [name:KTY][distance:3540] Price:"
Run Code Online (Sandbox Code Playgroud)
使用java.util.regex包问题和模式类,我必须得到以下格式的输出字符串:
Output: [NYK:1100][CLT:2300][KTY:3540]
Run Code Online (Sandbox Code Playgroud)
你能建议一个可以帮助我获得上述输出格式的RegEx模式吗?
你可以\[name:([A-Z]+)\]\[distance:(\d+)\]像这样使用这个正则表达式:
String regex = "\\[name:([A-Z]+)\\]\\[distance:(\\d+)\\]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
result.append("[");
result.append(matcher.group(1));
result.append(":");
result.append(matcher.group(2));
result.append("]");
}
System.out.println(result.toString());
Run Code Online (Sandbox Code Playgroud)
产量
[NYK:1100][CLT:2300][KTY:3540]
Run Code Online (Sandbox Code Playgroud)
\[name:([A-Z]+)\]\[distance:(\d+)\]意思是得到两组,一组是上面的字母\[name:([A-Z]+)\],第二组后得到数字\[distance:(\d+)\] 来自@tradeJmark的另一个解决方案你可以使用这个正则表达式:
String regex = "\\[name:(?<name>[A-Z]+)\\]\\[distance:(?<distance>\\d+)\\]";
Run Code Online (Sandbox Code Playgroud)
因此,您可以通过组的名称轻松获取每个组的结果,而不是像这样的索引:
while (matcher.find()) {
result.append("[");
result.append(matcher.group("name"));
//----------------------------^^
result.append(":");
result.append(matcher.group("distance"));
//------------------------------^^
result.append("]");
}
Run Code Online (Sandbox Code Playgroud)