繁体   English   中英

Java replaceAll用正则表达式分隔逗号字符串

[英]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]

我只需要提取每个逗号分隔块的第三个[值]。 例如,我需要打印:Mk Alprazolam,Mk Amantadina

我将其放在JasperReport的文本字段表达式中,因此我需要一行实现它。 例:

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

这将返回: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最后一个索引开始的子字符串'.' + 2 '.' + 2并在字符串末尾之前从索引1结束

  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

您也可以在线测试正则表达式。

您可以使用以下正则表达式并从中获得第三个(或模数等于0的正则表达式)

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

此正则表达式使用先行查找和后退查找在目标字符串之前或之后是否有括号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM