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);
我们将输入字符串拆分为,
。
对于每个部分(从上面)提取子字符串,从 '.' + 2
的最后一个索引开始,到字符串结束前的第一个索引结束
- 打印每一个。
您可以将各个字符串连接为
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 的那些)匹配项
此正则表达式使用前瞻和后视来查看目标字符串前后是否有括号。
我有这个字符串:
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);
我们将输入字符串拆分为
,
。对于每个部分(从上面)提取子字符串,从
'.' + 2
的最后一个索引开始,到字符串结束前的第一个索引结束- 打印每一个。
您可以将各个字符串连接为
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 的那些)匹配项
此正则表达式使用前瞻和后视来查看目标字符串前后是否有括号。