簡體   English   中英

使用正則表達式從Java中的匹配字符串中提取組

[英]Extracting a group from matched String in Java using regex

我有一個包含這樣的值的字符串列表:

String [] arr = {"${US.IDX_CA}", "${UK.IDX_IO}", "${NZ.IDX_BO}", "${JP.IDX_TK}", "${US.IDX_MT}", "more-elements-with-completely-different-patterns-which-is-irrelevant"};

我正在嘗試從此列表中提取所有IDX_XX。 所以從上面的列表中,我應該在Java中使用正則表達式來擁有IDX_CA,IDX_IO,IDX_BO等

我寫了以下代碼:

Pattern pattern = Pattern.compile("(.*)IDX_(\\w{2})");
for (String s : arr){
     Matcher m = pattern.matcher(s);
      if (m.matches()){
        String extract = m.group(1);
        System.out.println(extract);
      }
}

但這不會打印任何內容。 有人可以告訴我我在犯什么錯誤。 謝謝。

使用以下修復程序:

String [] arr = {"${US.IDX_CA}", "${UK.IDX_IO}", "${NZ.IDX_BO}", "${JP.IDX_TK}", "${US.IDX_MT}", "more-elements-with-completely-different-patterns-which-is-irrelevant"};
Pattern pattern = Pattern.compile("\\bIDX_(\\w{2})\\b");
for (String s : arr){
     Matcher m = pattern.matcher(s);
      while (m.find()){
        System.out.println(m.group(0)); // Get the whole match
        System.out.println(m.group(1)); // Get the 2 chars after IDX_
      }
}

參見Java演示 ,輸出:

IDX_CA
CA
IDX_IO
IO
IDX_BO
BO
IDX_TK
TK
IDX_MT
MT

注意事項

  • 使用\\bIDX_(\\w{2})\\b模式,該模式匹配IDX_和兩個單詞字符之間的字字符,並在IDX_之后IDX_到第1組中的2個字符
  • m.matches需要完整的字符串匹配,因此將其替換為m.find()
  • ifwhile替換,以防在字符串中有多個匹配項
  • m.group(0)包含整個匹配值
  • m.group(1)包含第1組的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM