gpt4 book ai didi

java - 使用正则表达式从 Java 中的匹配字符串中提取组

转载 作者:行者123 更新时间:2023-11-30 06:41:00 24 4
gpt4 key购买 nike

我有一个包含如下值的字符串列表:

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。所以从上面的列表中,我应该有 IDX_CA、IDX_IO、IDX_BO 等在 Java 中使用正则表达式

我写了下面的代码:

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 demo ,输出:

IDX_CA
CA
IDX_IO
IO
IDX_BO
BO
IDX_TK
TK
IDX_MT
MT

注意事项:

  • 使用 \bIDX_(\w{2})\b 匹配 IDX_ 的模式和单词边界之间的 2 个单词字符,并捕获 之后的 2 个字符IDX_ 进入第 1 组
  • m.matches 需要一个完整的字符串匹配,所以它被替换为 m.find()
  • if 替换为 while 以防字符串中有超过 1 个匹配项
  • m.group(0) 包含整个匹配值
  • m.group(1) 包含第 1 组值。

关于java - 使用正则表达式从 Java 中的匹配字符串中提取组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56579110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com