gpt4 book ai didi

java - 使用正则表达式从字符串中提取值

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:46 26 4
gpt4 key购买 nike

我有这个java代码

String msg = "*1*20*11*30*IGNORE*53*40##";
String regex = "\\*1\\*(.*?)\\*11\\*(.*?)\\*(.*?)\\*53\\*(.*?)##";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(msg);
if (matcher.find()) {
for (int i = 0; i < matcher.groupCount(); i++) {
System.out.println(matcher.group((i+1)));
}
}

输出是

20
30
IGNORE
40

我如何更改正则表达式,忽略 IGNORE 字符串?我想,匹配器找不到写在那里的任何东西。20、30、40 所在的位置是我需要提取的值,在我的情况下 IGNORE 是任何不需要我的协议(protocol)特定计数器

最佳答案

始终忽略第三个参数:

根本不创建捕获(不使用括号)。

\\*1\\*(.*?)\\*11\\*(.*?)\\*.*?\\*53\\*(.*?)##

独立于位置忽略:

您需要像您正在做的那样捕获 IGNORE 部分,并检查您的循环是否需要忽略它:

String msg = "*1*20*11*30*IGNORE*53*40##";
String regex = "\\*1\\*(.*?)\\*11\\*(.*?)\\*(.*?)\\*53\\*(.*?)##";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(msg);
if (matcher.find()) {
for (int i = 0; i < matcher.groupCount(); i++) {
if (!matcher.group(i+1).equals("IGNORE")) {
System.out.println(matcher.group(i+1));
}
}
}

DEMO

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

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