使用Java
如何在类似的表达式中搜索括号之间的文本
"Request ECUReset for [*11 01]"
我想提取“11 01” 但我不确切知道括号内文本的长度。
可能是:"Request ECUReset for [*11 01]"
或:"Request ECUReset for [*11]"
或:"Request ECUReset for [*11 01 10]"
或任何长度
任何帮助吗??
答案 0 :(得分:1)
如果字符串具有固定格式,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
类)来匹配括号之间的数字:
<强> Online demo here. 强>
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;
}
}
(与上面相同的输出)
答案 1 :(得分:0)
假设您没有任何嵌套括号,并且想要在*
之后忽略[
,您可以使用例如此示例中的组
String data="Request ECUReset for [*11 01]";
Matcher m=Pattern.compile("\\[\\*?(.*?)\\]").matcher(data);
while (m.find()){
System.out.println(m.group(1));
}
此外,如果您知道只有一个匹配的部分,则可以使用单行
System.out.println(data.replaceAll(".*\\[\\*?(.*?)\\].*", "$1"));