regex 如何获取最后两个下划线之间的字符串

ubof19bj  于 2023-02-05  发布在  其他
关注(0)|答案(5)|浏览(214)

我有一个字符串"abcde-abc-db-tada_x12.12_999ZZZ_121121.333"
我想要的结果应该是999ZZZ
我曾尝试使用:

private static String getValue(String myString) {
    
    Pattern p = Pattern.compile("_(\\d+)_1");
    Matcher m = p.matcher(myString);
    if (m.matches()) {
        System.out.println(m.group(1));  // Should print 999ZZZ
    }
    else {
         System.out.println("not found"); 
    }
}
ar7v8xwq

ar7v8xwq1#

如果您希望继续使用基于正则表达式的方法,请使用以下模式:

.*_([^_]+)_.*

这将贪婪地消耗掉倒数第二个underscrore,然后再消耗并捕获9999ZZZ
代码示例:

String name = "abcde-abc-db-tada_x12.12_999ZZZ_121121.333";
Pattern p = Pattern.compile(".*_([^_]+)_.*");
Matcher m = p.matcher(name);
if (m.matches()) {

    System.out.println(m.group(1));  // Should print 999ZZZ

} else {
     System.out.println("not found"); 
}


∮ ∮ ∮ ∮

mbzjlibv

mbzjlibv2#

使用字符串拆分?

String given = "abcde-abc-db-tada_x12.12_999ZZZ_121121.333";
String [] splitted = given.split("_");
String result = splitted[splitted.length-2];
System.out.println(result);
dtcbnfnu

dtcbnfnu3#

除了split之外,您还可以使用substring

String s = "abcde-abc-db-tada_x12.12_999ZZZ_121121.333";
        String ss = (s.substring(0,s.lastIndexOf("_"))).substring((s.substring(0,s.lastIndexOf("_"))).lastIndexOf("_")+1);
        System.out.println(ss);

或者,

String s = "abcde-abc-db-tada_x12.12_999ZZZ_121121.333";
        String arr[] = s.split("_");
        System.out.println(arr[arr.length-2]);
jucafojl

jucafojl4#

获取最后两个下划线字符之间的文本,首先需要找到最后两个下划线字符的索引,使用lastIndexOf非常容易:

String s = "abcde-abc-db-tada_x12.12_999ZZZ_121121.333";
String r = null;
int idx1 = s.lastIndexOf('_');
if (idx1 != -1) {
    int idx2 = s.lastIndexOf('_', idx1 - 1);
    if (idx2 != -1)
        r = s.substring(idx2 + 1, idx1);
}
System.out.println(r); // prints: 999ZZZ

这比任何使用regex的解决方案都要快,包括使用split

8ulbf1ek

8ulbf1ek5#

由于我在第一次阅读时误解了有问题的代码的逻辑,同时使用正则表达式出现了一些很好的答案,这是我使用String类中包含的一些方法的尝试(它引入了一些变量,只是为了让阅读更清楚,当然可以用更短的方式编写):

String s = "abcde-abc-db-ta__dax12.12_999ZZZ_121121.333";
int indexOfLastUnderscore = s.lastIndexOf("_");
int indexOfOneBeforeLastUnderscore = s.lastIndexOf("_", indexOfLastUnderscore - 1);
if(indexOfLastUnderscore != -1 && indexOfOneBeforeLastUnderscore != -1) {
    String sub = s.substring(indexOfOneBeforeLastUnderscore + 1, indexOfLastUnderscore);
    System.out.println(sub);
}

相关问题