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