Java 用正则表达式替换所有分隔的逗号字符串

Java replaceAll for separated comma String with regex

我有这个字符串:

String a = [MercadosArmados.GpoMerc-CTN3].[Mercado Marketing SNC].[Mk Alprazolam], [MercadosArmados.GpoMerc-CTN3].[Mercado Marketing SNC].[Mk Amantadina]

我只需要提取每个逗号分隔块的第 3 个 [值]。例如,我需要打印: Mk 阿普唑仑,Mk Amantadina

我将把它放在 JasperReport 的文本字段表达式中,所以我需要在一行中实现它。示例:

a.substring(0, a.indexOf(",")).substring(a.substring(0, a.indexOf(",")).lastIndexOf("[")).replace("[", "").replaceAll("]", "")

这个 returns:Mk Alprazolam...但我需要它用于每个逗号分隔的块(可能是 1+)。

我用 .replaceAll 尝试了一些正则表达式,但无法实现。

如有任何帮助,我们将不胜感激。

谢谢

假设输入字符串始终采用您提到的格式(否则您需要处理一些特殊情况),您可以简单地做

Arrays.stream(a.split(","))
            .map(str -> str.substring(str.lastIndexOf(".") + 2, str.length() - 1))
            .forEach(System.out::println);
  1. 我们将输入字符串拆分为,

  2. 对于每个部分(从上面)提取子字符串,从 '.' + 2 的最后一个索引开始,到字符串结束前的第一个索引结束

  3. 打印每一个。

您可以将各个字符串连接为

String result = Arrays.stream(a.split(","))
            .map(str -> str.substring(str.lastIndexOf(".") + 2, str.length() - 1))
            .collect(Collectors.joining(" , "));

replaceAll()溶液:

s = s.replaceAll("\[[^\]]*\]\.|[\[\]]", "");

有关演示,请参阅 regex101

说明

初始文本:

[MercadosArmados.GpoMerc-CTN3].[Mercado Marketing SNC].[Mk Alprazolam], [MercadosArmados.GpoMerc-CTN3].[Mercado Marketing SNC].[Mk Amantadina]

首先它匹配 [xxx]. 并替换为空。剩下:

[Mk Alprazolam], [Mk Amantadina]

然后它也匹配 [] 并用空替换它们。结果:

Mk Alprazolam, Mk Amantadina

以下是使用正则表达式提取所需信息的方法:

String a = "[MercadosArmados.GpoMerc-CTN3].[Mercado Marketing SNC].[Mk Alprazolam], [MercadosArmados.GpoMerc-CTN3].[Mercado Marketing SNC].[Mk Amantadina]";
Pattern p = Pattern.compile("(?:\[[^\[]*\]\.){2}\[([^\[]*)\]");
Matcher m = p.matcher(a);
while (m.find()) {
    System.out.println(m.group(1));
}

将打印:

Mk Alprazolam
Mk Amantadina

您还可以测试正则表达式 online

您可以使用以下正则表达式并从中获取第 3 个(或 3 的模等于 0 的那些)匹配项

(?:((?<=\[)(.*?)(?=\])))+

此正则表达式使用前瞻和后视来查看目标字符串前后是否有括号。