使用Java如何在这样的表达式中搜索括号之间的文本
"Request ECUReset for [*11 01]"
我想提取“11 01”,但我不知道括号之间文本的确切长度。
可以是 :"Request ECUReset for [*11 01]"
或 :"Request ECUReset for [*11]"
或 :"Request ECUReset for [*11 01 10]"
或任何长度
请问有什么帮助吗??
使用Java如何在这样的表达式中搜索括号之间的文本
"Request ECUReset for [*11 01]"
我想提取“11 01”,但我不知道括号之间文本的确切长度。
可以是 :"Request ECUReset for [*11 01]"
或 :"Request ECUReset for [*11]"
或 :"Request ECUReset for [*11 01 10]"
或任何长度
请问有什么帮助吗??
如果字符串具有固定格式,String#substring()
就足够了:
public static void main(String[] args) {
String input1 = "Request ECUReset for [*11 01]";
String output1 = input1.substring(input1.indexOf("[*")+"[*".length(), input1.indexOf("]", input1.indexOf("[*")));
System.out.println(input1 + " --> " + output1);
String input2 = "Request ECUReset for [*11]";
String output2 = input2.substring(input2.indexOf("[*")+"[*".length(), input2.indexOf("]", input2.indexOf("[*")));
System.out.println(input2 + " --> " + output2);
String input3 = "Request ECUReset for [*11 01 10]";
String output3 = input3.substring(input3.indexOf("[*")+"[*".length(), input3.indexOf("]", input3.indexOf("[*")));
System.out.println(input3 + " --> " + output3);
}
输出:
Request ECUReset for [*11 01] --> 11 01
Request ECUReset for [*11] --> 11
Request ECUReset for [*11 01 10] --> 11 01 10
或者,如果输入不太稳定,您可以使用正则表达式(通过实用程序Pattern
类)来匹配括号之间的数字:
import java.util.regex.*;
public class PatternBracket {
public static void main(String[] args) {
String input1 = "Request ECUReset for [*11 01]";
String output1 = getBracketValue(input1);
System.out.println(input1 + " --> " + output1);
String input2 = "Request ECUReset for [*11]";
String output2 = getBracketValue(input2);
System.out.println(input2 + " --> " + output2);
String input3 = "Request ECUReset for [*11 01 10]";
String output3 = getBracketValue(input3);
System.out.println(input3 + " --> " + output3);
}
private static String getBracketValue(String input) {
Matcher m = Pattern.compile("(?<=\\[\\*)[^\\]]*(?=\\])").matcher(input);
if (m.find()) {
return m.group();
}
return null;
}
}
(与上面相同的输出)
假设您没有任何嵌套括号,并且在可以使用例如本示例中的示例组*
之后要忽略[
String data="Request ECUReset for [*11 01]";
Matcher m=Pattern.compile("\\[\\*?(.*?)\\]").matcher(data);
while (m.find()){
System.out.println(m.group(1));
}
此外,如果你知道你只有一个匹配的部分,你可以使用 one-liner
System.out.println(data.replaceAll(".*\\[\\*?(.*?)\\].*", "$1"));