Java Regex查找最后一个冒号后的字符串
以下是一些示例输入:Java Regex查找最后一个冒号后的字符串,java,regex,Java,Regex,以下是一些示例输入: <210> DW_AT_name : (indirect string, offset: 0x55): double <ae> DW_AT_name : (indirect string, offset: 0x24): long int <b5> DW_AT_name : int 这是我到目前为止使用的正则表达式(由于它是Java格式的,所以双转义): 它适用于int,但不适用于
<210> DW_AT_name : (indirect string, offset: 0x55): double
<ae> DW_AT_name : (indirect string, offset: 0x24): long int
<b5> DW_AT_name : int
这是我到目前为止使用的正则表达式(由于它是Java格式的,所以双转义):
它适用于
int
,但不适用于其他两个。我认为最好的解决办法是基本上说‘在最后一个冒号后获取所有内容’,但我不确定如何实现。请注意,它还必须包括DW\u AT\u NAME
内容。您不需要正则表达式:
String yourString = "<210> DW_AT_name : (indirect string, offset: 0x55): double";
String result;
if (yourString.contains("DW_AT_name")) {
int lastIndex = yourString.lastIndexOf(":");
result = yourString.substring(lastIndex + 1).trim();
} else {
result = "ERROR"; // or handle this however you want
}
System.out.println(result);
String yourString=“DW_AT_name:(间接字符串,偏移量:0x55):双精度”;
字符串结果;
if(yourString.contains(“DW_AT_name”)){
int lastIndex=yourString.lastIndexOf(“:”);
result=yourString.substring(lastIndex+1.trim();
}否则{
result=“ERROR”//或根据需要处理此问题
}
系统输出打印项次(结果);
只需找到最后一个:
,然后拿走所有东西。然后修剪它以删除前导和尾随空格
我编辑了我的问题,它还需要检查DW_AT_name。“字符串拆分”不会这样做
只需使用
包含
,即可。(编辑的答案)此regexp^.*DW_AT_name.*:\s*(.+)$
执行刚刚测试的任务。请尝试下一步:
public static void main(String[] args) {
String text =
"<210> DW_AT_name : (indirect string, offset: 0x55): double\n" +
"<ae> DW_AT_name : (indirect string, offset: 0x24): long int\n" +
"<b5> DW_AT_name : int";
Pattern pattern = Pattern.compile("^.*DW_AT_NAME.*:\\s*([^:]+)$",
Pattern.CASE_INSENSITIVE);
Scanner sc = new Scanner(text);
while(sc.hasNextLine()) {
String line = sc.nextLine();
Matcher matcher = pattern.matcher(line);
if (matcher.matches()) {
System.out.println(matcher.replaceAll("$1"));
}
}
}
我编辑了我的问题,它还需要检查DW_AT_name。字符串拆分不会这样做。最好使用
String.lastIndexOf
而不是拆分(因为您只关心最后一个标记)
String yourString = "<210> DW_AT_name : (indirect string, offset: 0x55): double";
String result;
if (yourString.contains("DW_AT_name")) {
int lastIndex = yourString.lastIndexOf(":");
result = yourString.substring(lastIndex + 1).trim();
} else {
result = "ERROR"; // or handle this however you want
}
System.out.println(result);
String type = str.replaceAll(".*:(?=[^:]+$)", "");
public static void main(String[] args) {
String text =
"<210> DW_AT_name : (indirect string, offset: 0x55): double\n" +
"<ae> DW_AT_name : (indirect string, offset: 0x24): long int\n" +
"<b5> DW_AT_name : int";
Pattern pattern = Pattern.compile("^.*DW_AT_NAME.*:\\s*([^:]+)$",
Pattern.CASE_INSENSITIVE);
Scanner sc = new Scanner(text);
while(sc.hasNextLine()) {
String line = sc.nextLine();
Matcher matcher = pattern.matcher(line);
if (matcher.matches()) {
System.out.println(matcher.replaceAll("$1"));
}
}
}
double
long int
int